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

来源:互联网 发布:淘宝官方企业店是什么 编辑:程序博客网 时间:2024/06/05 11:38

函数

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

 

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


sum = lambda a,b:print('a:%d b:%d a+b=%d' %(a,b,a+b))x=8y=1sum(x,y)sum(b=x,a=y)

执行结果:
a:8 b:1 a+b=9a:1 b:8 a+b=9

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

def defaultValue(a=1,*others):    print(a)    print(others)x=8list=[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中脚本的拼接,也就是说被importpython脚本中如果自带自动执行的代码那么import后该代码会自动执行,这个跟java略有区别,java中的逻辑都在方法体内,方法不被调用,逻辑就不会执行。

 

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

From模块名 import函数名

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

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

 

异常处理:

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执行成功6finally

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

 

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

class MyError(RuntimeError):    def __init__(self, *args, **kwargs):        self.args=argstry:    raise MyError('Exception')except MyError as e:    print(e)






原创粉丝点击