Python 函数详解

作用域

全局变量&局部变量

全局变量和局部变量都是在讨论无参数的函数,不要把全局变量和局部变量与函数的参数混淆了。
1.1 函数会在函数域中找变量(局部变量),如果函数内部没有定义该变量,则会在全局中寻找变量(全局变量)

a=100
def test1():
	print(a) # 输出结果100,函数域里没有a,所以去全局寻找
def test2():
	a=200
	print(a) # 输出结果为200,函数域里有a,所以取函数域里面的值

1.2 当一个函数使用了全局变量时,就不能再在函数域中修改同名变量,因为这个操作是在修改全局变量

a=100
def test1():
	print(a) 
	a=200 # 此处不可以修改全局变量
	print(a) 
test1()
UnboundLocalError: local variable 'a' referenced before assignment

如果想要修改全局变量,要先用global声明

a=100
def test1():
    global a
    print(a) 
    a=200 # 这里变成修改全局变量
    print(a) # 输出结果为200,

1.3 之所以不能修改全局变量,是因为局部作用域不能修改全局变量的指向,正是因为这个原因,所以对列表等可变的类型,可以不用声明就可以修改全局,因为没有更改其指向,而是修改了内容。

a=[1]
def test1():
    a.append(1)
    print(a)

Python 使用 LEGB 的顺序来查找一个符号对应的对象
locals -> enclosing function -> globals -> builtins

  1. locals,当前所在函数、模块
  2. enclosing,外部嵌套函数的命名空间(闭包中常见)
  3. globals,全局变量,函数定义所在模块的命名空间
  4. builtins,内建模块的命名空间

返回值(return)

可以使用list tuple dict 或者直接用,将多个结果同时返回(本质是tuple)

其他

匿名函数:

lambda [arg1 [,arg2,…argn]]:expression
冒号:后面相当于return返回

函数作为参数

当函数作为参数时,是把函数的引用传入到了函数里
def name(a,b,func)

字符串转函数

字符串转表达式
eval() 结合eval input可以给python传入function

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值