Java转Python之函数、模块和异常处理

约定不等于承诺〃 2022-06-03 03:13 249阅读 0赞

函数

声明方式与JS类似,声明的关键字由function改成def,用大括号改成缩进方式来限定范围。

参数的赋值可以用关键字方式,这个是Java不具备的,有点像Spring Cloud Feign中按关键字传值那样(当然Java那种按照顺序的传参格式Pythone也是可以支持的),Python对Lambda的支持,用过jdk1.8的话并不陌生。

  1. sum = lambda a,b:print('a:%d b:%d a+b=%d' %(a,b,a+b))
  2. x=8
  3. y=1
  4. sum(x,y)
  5. sum(b=x,a=y)

执行结果:

  1. a:8 b:1 a+b=9
  2. a:1 b:8 a+b=9

在声明函数时,可以给参数设置默认值,也支持不定长度参数,与Java中一样

  1. def defaultValue(a=1,*others):
  2. print(a)
  3. print(others)
  4. x=8
  5. list=[1,'hello']
  6. defaultValue(x,list)
  7. defaultValue()

执行结果:

  1. 8
  2. ([1, 'hello'],)
  3. 1
  4. ()

python中函数内可以读写局部变量,只可以读成员变量,如果要修改成员变量需要在函数体内通过global关键字声明一下

  1. param1= 'global'
  2. def memory1():
  3. #global param1
  4. param1 = 'globalnew'
  5. print(param1)
  6. print(locals())
  7. print(globals())
  8. def memory2():
  9. print(param1)
  10. memory1()
  11. memory2()

执行结果:

  1. globalnew
  2. {'param1': 'globalnew'}
  3. {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x0000022E28D0B8D0>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'C:/python/work/untitled/venv/function/myTow.py', '__cached__': None, 'param1': 'global', 'memory1': <function memory1 at 0x0000022E28C12E18>, 'memory2': <function memory2 at 0x0000022E28D04598>}
  4. global

模块:

语法上跟Java一样,想调用哪个java类中的方法就要先import进来那个文件,然后调用时“模块名.函数名”的方式来调用。但是有一点一定要注意,python里的import更像是JS中脚本的拼接,也就是说被import的python脚本中如果自带自动执行的代码那么import后该代码会自动执行,这个跟java略有区别,java中的逻辑都在方法体内,方法不被调用,逻辑就不会执行。

Python执行模块的部分导入,这个是Java不具备的,语法格式

From模块名 import函数名

实测中发现部分import的函数如果调用到其它函数,会被自动import进来,这块比较省心。

Python也有Java中package的概念,用法也一样,通过包名来划分功能模块,通过包名的不同来区分相同模块名的不同功能。

异常处理:

Python中对异常的处理使用try/except语句,对于异常的原理和传递与Java一样,也有finally,

例子:

  1. def sum (a,b) :
  2. try:
  3. c=a+b
  4. except TypeError as e:
  5. print('类型不匹配 %s' %e)
  6. except:
  7. print('其它异常')
  8. else:
  9. print('执行成功')
  10. print(c)
  11. finally:
  12. print('finally')
  13. sum(3,'3')
  14. sum(3,3)

执行结果:

  1. 类型不匹配 unsupported operand type(s) for +: 'int' and 'str'
  2. finally
  3. 执行成功
  4. 6
  5. finally

通过例子需要注意,else中是可以访问的到try中的局部变量的,这一点跟java略不一样。

Raise关键字就像java中的throws一样可以手动抛出异常,也可以通过继承RuntimeError来自定义异常。

  1. class MyError(RuntimeError):
  2. def __init__(self, *args, **kwargs):
  3. self.args=args
  4. try:
  5. raise MyError('Exception')
  6. except MyError as e:
  7. print(e)

发表评论

表情:
评论列表 (有 0 条评论,249人围观)

还没有评论,来说两句吧...

相关阅读