python local函数_python中的函数

1.函数参数---动态传参

形参的第三种:

动态参数的接收方式

1.动态接收位置参数,动态接收参数的时候要注意:动态参数必须在位置参数后面

def func(*food):print('>>>',food)

func('桃子','苹果')#>>> ('桃子', '苹果') 这样传参的结果是得到一个元组

2.动态接收关键字参数

在python中可以动态的位置参数,但是 * 这种情况只能接收位置参数无法接收关键字参数

在python中使用**来接受动态关键自参数,这个时候接收的是一个dict

#python中使用**kwargs来接收动态关键字参数

def func(**kwargs):print('>>>',kwargs)

func(a= '桃子', b = '苹果')#>>> {'a': '桃子', 'b': '苹果'}

所以最终的顺序是

位置参数 > *args > 默认值参数 >**kwargs

这四种参数可以任意的进行使用

def func(*args, **kwargs):

print(args, kwargs)

func("麻花藤","⻢晕",wtf="胡辣汤")

这个样子就可以接收所有的参数了

动态传参的另一种方式:

1. 在实参位置上给一个序列,列表,可迭代对象前⾯加个*表示把这个序列按顺序打散.

def fun(*args):print(args)

lst= [1, 4, 7]

fun(lst[0], lst[1], lst[2])

fun(*lst) #可以使用*⼀一个列表按顺序打散

s = "臣妾做不到"fun(*s) #字符串也可以打散, (可迭代对象)

2. 在形参的位置上的* 表示把接收到的参数组合成一个元组,如果是一个字典,也可以打散.不过需要用两个*

def func(**kwargs):print('>>>',kwargs)

dic= {'a':'桃子', 'b':'苹果'}

func(**dic)#>>> {'a ': '桃子', 'b ': '苹果'}

2. 作用域和名称空间

名称空间: 用来存放名字(变量, 函数名, 类名, 引入的模块名)的

1. 全局名称空间: 我们在py文件中自己写的变量, 函数.....

2. 内置名称空间: 我们python解释器提供好的一些内置内容(print, input....)

3. 局部名称空间: 在我们执行函数的时候.会产生一个局部名称空间. 放的是: 函数内部的内容(变量, 函数,类...)

名称空间可能会有无数个, 局部名称空间而言. 相对是独立的.一般互不干扰

a = 10

deffunc():

a = 20

print(a)

func() # 20

加载顺序:

1. 内置命名空间

2. 全局命名空间

3. 局部命名空间(函数被执⾏行行的时候)

取值顺序:

1. 局部命名空间

2. 全局命名空间

3. 内置命名空间

作用域:

1. 全局作用域: 内置+全局

2. 局部作用域: 局部

globals() 查看全局作用域

locals() 查看当前作用域

我们可以通过globals()函数来查看全局作用域中的内容, 也可以通过locals()来查看局部作用域中的变量和函数信息

3. 函数的嵌套

在函数中声明函数

在内部函数中使用变量的时候, 查找顺序: 先找自己 -> 上一层 -> 上一层..全局 -> 内置

# 函数的嵌套

deffun2():

print(222)

deffun3():

print(666)

print(444)

fun3()

print(888)

print(33)

fun2()

print(555)

4. nonlocal和global关键字

global: 在局部引入全局变量

nonlocal: 在局部...内层函数引入外层离他最近的那个变量.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值