一、函数定义

# 形参
def func(a, b):
    c = a + b
    return c
# 实参
func(1, 2)

二、实参分类

1. 位置参数

1. 位置参数,传递参数时,需要形参、实参对应

def func(position1, position2):
    if position1 > position2:
        return position1
    else:
        return position2

def func(postiont1, position2):
    # 三元运算符
    c = a if a > b else b
    return c

2. 关键字参数

def func(name, address, age):
    pass

func(name='jone', age=18, address='北京')

3. 混合参数

注意: 在使⽤混合参数的时候, 关键字参数必须在位置参数后⾯

三、形参分类

1. 位置参数

# 位置参数. 按照位置来赋值
def func(name, address, age):
    pass

2. 默认值参数

# 在调⽤的时候可以给出具体的值, 也可以不给值, 使⽤默认值
def func(name, age, sax='男'):
    pass

4. *args

# 动态接收位置参数

def func(*args):
    # 以元组形式返回
    return args

func(1, 2, 3)

5. **kwargs

# 动态接收关键字参数

def func(**kwargs):
    # 以字典形式返回
    return kwargs

func(a = 1, b = 2, c = 3)

6. 动态传参的另一种方式

def fun(*args):
    print(args)
    
lst = [1, 4, 7]
# 可以使⽤*把⼀个列表按顺序打散
fun(*lst) 

s = "⾂妾做不到"
# 字符串也可以打散, (可迭代对象)
fun(*s) 
def fun(**kwargs):
    print(kwargs)
    
dic = {'a':1, 'b':2}
fun(**dic)

7. 传参顺序

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

四、函数注释

def chi(food, drink):
"""
这⾥是函数的注释, 先写⼀下当前这个函数是⼲什么的, ⽐如我这个函数就是⼀个吃
:param :param food: 参数food是什么意思
:param :param drink: 参数drink是什么意思
:return :return: 返回的是什么东东
"""
    print(food, drink)
    return "very good"

五、命名空间

1. 命名空间分类

1. 全局命名空间--> 我们直接在py⽂件中, 函数外声明的变量都属于全局命名空间
2. 局部命名空间--> 在函数中声明的变量会放在局部命名空间
3. 内置命名空间--> 存放python解释器为我们提供的名字, list, tuple, str, int这些都是内置命名空间

2. 加载顺序

1. 内置命名空间
2. 全局命名空间
3. 局部命名空间(函数被执⾏的时候)

3. 取值顺序

1. 局部命名空间
2. 全局命名空间
3. 内置命名空间

4. globalnonlocal

(1) global
a = 100
def func():
    # 加了个global表示不再局部创建这个变量了. ⽽是直接使⽤全局的a
    global a 
    a = 28
    print(a)
    
func()
print(a)

结果:28 28
(5) nonlocal
1. nonlocal 表⽰在局部作⽤域中, 调⽤⽗级命名空间中的变量

a = 10
def func1():
    a = 20
    def func2():
        nonlocal a
        a = 30
        print(a)
    func2()
    print(a)
func1()

结果:
加了nonlocal
30
30
不加nonlocal
30
20

六、总结return

1. 遇到return. 此函数结束, 函数后⾯的东⻄将不会再执⾏
2. return 返回值
    如果return什么都不写 或者 ⼲脆不写return .那么返回的就是None
    如果return后⾯写了⼀个值. 则调⽤者可以接收⼀个结果
    如果return后⾯写了多个结果, 则调⽤者可以接收⼀个tuple, 调⽤者可以直接解构成多个变量

版权声明:本文为hq82原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/hq82/p/11481400.html