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函数

评论关闭