Python函数,,1.创建函数以‘de
Python函数,,1.创建函数以‘de
1.创建函数
以‘def‘关键字开始,后边是函数名称,圆括号内是参数,后跟冒号,return返回,不写ruturn返回 None。
def Greet(name): print("Hello "+name)Greet("Python")输出:Hello Python
1.1 一些重要的函数属性
def Greet(name): "Greet说明:文档化函数" print("Hello "+name+"\n")Greet("Python")print(Greet.__doc__)#返回函数的文档字符串print(Greet.__name__)#返回函数名字print(Greet.__module__)#返回函数定义所在模块的名字输出:Hello PythonGreet说明:文档化函数Greet__main__
1.2 参数
1.2.1 关键字参数和默认值
#使用关键字参数可以忽略参数顺序#位置参数可以和关键字参数联合使用,但是位置参数必须放在关键字参数前面。def hello(gretting,name,pun="!"): print("%s ,%s%s" % (gretting,name,pun))hello("Hello","Bob")hello(name = "world",gretting = "Hello")#关键字hello("Hello","Bob",pun=".")输出:Hello ,Bob!Hello ,world!Hello ,Bob.
1.2.2 收集参数
def func3(title,*params): print(title) print(params)func3("title","Testing","Testing2","Testing3")输出:title(‘Testing‘, ‘Testing2‘, ‘Testing3‘)#可以看到参数前的星号将所有值放在同一个元组中,星号的意思就是收集其余位置的参数,如果不提供,就是个空元组。# "**"处理关键字参数 返回字典def print_params(**params): print(params)print_params(x=1,y=2,z=3)输出:{‘x‘: 1, ‘z‘: 3, ‘y‘: 2}联合使用示例:# "**"处理关键字参数def print_params(param1,param2,param3=7,*params4,**params5): print(param1,param2,param3) print(params4) print(params5)print_params("pa1","pa2","pa3","pa4","pa5","pa6",name="Bob",age=18,sex="男")输出:pa1 pa2 pa3(‘pa4‘, ‘pa5‘, ‘pa6‘){‘sex‘: ‘男‘, ‘name‘: ‘Bob‘, ‘age‘: 18}
1.2.3 收集参数的逆过程
def add(x,y): return x+yparams=(1,2)print(add(*params))输出3def printUserInfo(**params): print(params)params2 = {"name":"bob","age":20,"sex":"男"}printUserInfo(**params2)输出:{‘sex‘: ‘男‘, ‘name‘: ‘bob‘, ‘age‘: 20}
2.作用域
x=1#全局变量def func():#每个函数调用都会创建一个新的作用域 x=3func()#不会影响全局变量,全局变量名做参数名也没有问题print(x)输出:1如果局部变量或者参数的名字和想要访问的全局变量名相同,全局变量会被局部变量屏蔽,如果需要访问使用globals()["变量名"]获取
par = "thon"def combie(par): print(par+globals()["par"])combie("py")输出:python
重绑定全局变量
x=1def change(): global x x=x+1change()print(x)输出:2
3.其他
嵌套作用域,Python的函数是可以嵌套的
def foo(): def bar(): print("Hello") bar()
闭包
#闭包包含自由(未绑定到特定对象)变量;这些变量不是在这个代码块内或者任何全局上下文中定义的,而是在定义代码块的环境中定义(局部变量)。“闭包” 一词来源于以下两者的结合:要执行的代码块(由于自由变量被包含在代码块中,这些自由变量以及它们引用的对象没有被释放)和为自由变量提供绑定的计算环境(作用域)。(引用百度百科)def foo(fac): def bar(num): return num*fac return bardouble = foo(2)print(double(3))tri = foo(5)print(tri(6))print(foo(7)(8))输出:63056
递归
#阶乘def factorial(n): if n == 1: return 1 else: return n * factorial(n-1)print(factorial(5))输出:120#幂def power(x,n): if n == 0: return 1 else: return x * power(x,n-1)print(power(2,3))输出:8
lambda表达式(匿名函数)
#Python对匿名函数的支持有限,只有一些简单的情况下可以使用匿名函数。sum = lambda x, y : x + y"""相当于:def f(x,y): return x + y"""print(sum(2, 3))输出5
Python函数
评论关闭