python中的lo函数_python 函数的进阶

本文详细介绍了Python中的函数参数动态传递(*args, **kwargs),以及名称空间的划分、加载顺序和作用域。重点讲解了局部和全局作用域,以及函数嵌套中的变量管理和`global`与`nonlocal`的区别。
摘要由CSDN通过智能技术生成

一.函数参数补充

动态参数:

动态位置参数     *args  #动态位置参数获取的是一个元组(万能传参),*号后边的字母可以自己定义,通常会用                                             args.

动态关键字参数   **kwargs  #动态关键字传参或取到的是一个字典形式

参数位置:

位置参数 > 动态位置参数 > 默认(关键字)参数 >动态关键字参数

二.名称空间

1.名称空间划分:局部命名空间

全局命名空间

内置命名空间

2.加载顺序:内置 > 全局 > 局部

取值顺序:局部 > 全局 > 内置

3.作用域:

全局作用域:  内置 + 全局

局部作用域:  函数局部

4.#print(globals())     #查看全局作用域中的变量和函数名

#print(lovals())      #产看局部作用域中的变量和函数名

三.函数的嵌套:

def f():

print(11)

def f1():

print(22)

def f2():

print(33) **********重要

f2()

f1()

f()

函数的注释:更方便地明确函数的作用

def func():

# '''

# 这是打印的函数

# :param a: 没啥用1

# :param b: 没啥用1

# :param c: 没啥用1

# :param d: 没啥用1

# :return: 返回的None

# '''

# print(a,b,c,d)

global:可变数据类型在函数中可以直接进行操作,不可变数据类型需要使用global才能操作

注意:可变数据类型在函数中进行操作不会改变数据的ID,但通过global改变的数据,只是开辟了新的内存地址重新赋值给变量.

a = 12

print(id(a)) #1954966896

def func():

a = 15 # 在函数的局部中

print(a) # 使用的是局部 a = 15

print(id(a)) #1954966992

func()

nonlocal:改变最近的父级变量,如果上级没有能改变的就继续向上走,直到最外层函数就停止,注意不能改变全局变量.

a = 1 #全局

def fun_1(): #全局

a = 2 # fun_1 的局部变量

def fun_2(): # fun_1 下定义了fun_2

nonlocal a # 申明更改父级的变量值

a = 3 # 更改

def fun_3(): # 定义fun_3

a = 4 # 定义fun_3的局部变量

print(a) # 4

print(a) # 3 fun_2

fun_3() # 调用函数

print(a) # 3/4

print(a) # 2 打印的是 fun_1的局部变量

fun_2() # 调用函数

print(a) # 3

print(a) # 1 打印的全局的

fun_1() # 调用函数

print(a) # 1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值