Java转Python之函数、模块和异常处理
函数
声明方式与JS类似,声明的关键字由function改成def,用大括号改成缩进方式来限定范围。
参数的赋值可以用关键字方式,这个是Java不具备的,有点像Spring Cloud Feign中按关键字传值那样(当然Java那种按照顺序的传参格式Pythone也是可以支持的),Python对Lambda的支持,用过jdk1.8的话并不陌生。
sum = lambda a,b:print('a:%d b:%d a+b=%d' %(a,b,a+b))
x=8
y=1
sum(x,y)
sum(b=x,a=y)
执行结果:
a:8 b:1 a+b=9
a:1 b:8 a+b=9
在声明函数时,可以给参数设置默认值,也支持不定长度参数,与Java中一样
def defaultValue(a=1,*others):
print(a)
print(others)
x=8
list=[1,'hello']
defaultValue(x,list)
defaultValue()
执行结果:
8
([1, 'hello'],)
1
()
python中函数内可以读写局部变量,只可以读成员变量,如果要修改成员变量需要在函数体内通过global关键字声明一下
param1= 'global'
def memory1():
#global param1
param1 = 'globalnew'
print(param1)
print(locals())
print(globals())
def memory2():
print(param1)
memory1()
memory2()
执行结果:
globalnew
{'param1': 'globalnew'}
{'__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>}
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,
例子:
def sum (a,b) :
try:
c=a+b
except TypeError as e:
print('类型不匹配 %s' %e)
except:
print('其它异常')
else:
print('执行成功')
print(c)
finally:
print('finally')
sum(3,'3')
sum(3,3)
执行结果:
类型不匹配 unsupported operand type(s) for +: 'int' and 'str'
finally
执行成功
6
finally
通过例子需要注意,else中是可以访问的到try中的局部变量的,这一点跟java略不一样。
Raise关键字就像java中的throws一样可以手动抛出异常,也可以通过继承RuntimeError来自定义异常。
class MyError(RuntimeError):
def __init__(self, *args, **kwargs):
self.args=args
try:
raise MyError('Exception')
except MyError as e:
print(e)
还没有评论,来说两句吧...