首页 > 其他分享 >函数(二)

函数(二)

时间:2022-10-10 19:34:27浏览次数:52  
标签:函数 名称 func 空间 变量名 def

函数(二)

函数参数

1.位置参数

说明

位置参数分为位置形参和位置实参
位置形参
    函数定义阶段括号内从左往右依次填写的变量名
    def func(a, b, c):pass
位置实参
    函数调用阶段括号内从左往右依次填写的数据值
    func(1, 2, 3)

使用

1.函数调用时括号内填写的数据值需要与函数定义时填写的变量名一一对应,不能多也不能少
2.实参没有固定的含义可以传数据值,也可以传绑定了数据值的变量名
eg:
    name = 'zyg'
    pwd = 111
    age = 18
    def func(a, b, c):
        print(a, b, c)
    func(1, 2, 3)  # 1, 2, 3
    func(1, 2)  # 报错
    func(1, 2, 3, 4)  # 报错
    func(name, pwd, age)  # zyg, 111, 18

2.关键字参数

说明

关键字形参
    别名叫默认参数,定义函数时就已经给了数据值,用户可以传也可以不传
    传了,会用新的数据值替换已经给了的数据值;不传,则直接用已经给了的数据值
关键字实参
    调用函数时指定数据值给哪个变量名

用法

1.关键字传参一定要跟在位置传参的后面,否则会报错
2.同一个形参在调用的时候不能多次赋值
eg:
    def func(a=1, b):  # 报错  函数定义不能让位置参数在关键字参数后面
    def func(a, b):
        print(a, b)
    func(a=1, b=2)  # 1,2
    func(b=1, a=2)  # 2,1  顺序颠倒也可以
    func(a=1, 2)  # 报错  关键字传参要跟在位置传参的后面
    func(1, a=2, b=3)  # 报错  同一个形参在调用的时候不能多次赋值
    
    def func(a, b, c=6):
        print(a, b, c)
    func(1, 2)  # 1, 2, 6  有默认参数时传参时可以不传
    func(1, 2, 3)  # 1, 2, 3  有默认参数时,函数调用传参了那么就是穿的参数
    func(1, 2, c=8)  # 1, 2, 8  默认参数也可以用关键字传参

3.可变长参数

说明

可变长实参
    字面意思接受的数据值的数量是可变的
可变长实参
    传递的数据值的数量是可变的

用法

可变长形参
    1.定义函数时如需要接受多个位置参数可在变量名前面加*,接受的位置参数组织成元组赋值给*号后面的变量名
    def func(*a):pass
    2.定义函数时如需要接受多个关键字参数可在变量名前面加**,接受的关键字参数组织成字典赋值给**后面的变量名
    def func(**a):pass
    3.
eg:
    def func1(*a):
        print(a)
    func1()  # ()  使用可变长形参时可以不传参数,结果为空元组
    func1(1, 2, 3)  # (1, 2, 3)  传递的参数自动组织成元组的形式赋值给*号后面的变量名
    
    def func2(a, *b):
        print(a, b)
    func2()  # 报错  函数至少需要一个参数给到a
    func2(1)  # 1, ()
    func2(1, 2, 3, 4)  # 1, (2, 3, 4)
    
**的形参用法与*差不多
    def func3(**a):
        print(a)
    func3()  # {}
    func3(b=1,c=2)  # {'b': 1, 'c': 2}
    
    def func4(a, **b):
        print(a, b)
    func4()  # 报错  函数至少需要一个参数给到a
    func4(1)  # 1 {}
    func4(1, c=2, d=3)  # 1 {'c': 2, 'd': 3}
    func4(a=1, c=2, d=3)  # 1 {'c': 2, 'd': 3}
    
由于*和**在函数的形参中使用频率很高 后面跟的变量名推荐使用
    *args
    **kwargs

可变长实参
    1.调用函数时如需要传递列表或者元组内的数据值时在列表或元组的变量名前面加*
      把列表中的数据一个一个拿出来然后按照位置参数一次性传递给函数
    2.调用函数时如需要传递字典内的键值对则在字典的变量名前面加**
      把字典中的键值对打散成关键字参数的形式传给函数
eg:
    def index(a, b, c):
     	print(a, b, c)
    l1 = [11, 22, 33]
    t1 = (33, 22, 11)
    s1 = 'tom'
    se = {123, 321, 222}
    d1 = {'username': 'jason', 'pwd': 123, 'age': 18}
    index(*l1)  # (11, 22, 33)
    index(*t1)  # (33, 22, 11)
    index(*s1)  # ('t', 'o', 'm')
    index(*se)  # (123, 321, 222)
    index(*d1)  # ('username', 'pwd', 'age')
    
    def index(username, pwd, age):
        print(username, pwd, age)
    d1 = {'username': 'jason', 'pwd': 123, 'age': 18}
    index(**d1)  # (username = 'jason', pwd = 123, age = 18)
函数定义与调用时各种参数的排序方法
   越短/越简单的越靠前
   越长/越复杂的越靠后

名称空间与作用域

名称空间

名称空间我们可以简单理解为存储变量名的地方(实际是存储变量名与数据值绑定关系的地方)

名称空间分为三种:内置名称空间、全局名称空间、局部名称空间

1.内置名称空间
    解释器运行自动产生
    存放解释器自带的变量名
2.全局名称空间
    py文件运行产生产生的空间
    存放除了函数体代码(和类体代码)中的所有自己定义的变量名
3.局部名称空间
    函数体代码运行(或者是类体代码运行)产生的空间
    存放函数体代码(或者是类体代码)中生成的变量名

名称空间存活周期

内置名称空间
    python解释器运行自动创建,关闭则销毁
全局名称空间
    py文件执行时创建,运行结束销毁
局部名称空间
    函数体代码运行创建,运行结束销毁

名称空间作用域

内置名称空间
    在解释器环境下都有效
全局名称空间
    在一个py文件下有效
局部名称空间
    函数体代码内有效

名称的查找顺序

查找顺序

查找名称时需要先搞清楚该名称在哪个名称空间中
1.在局部名称空间中
    查找顺序:局部名称空间>>>全局名称空间>>>内置名称空间
2.在全局名称空间中
    查找顺序:全局名称空间>>>内置名称空间
正常情况下查找名称的查找顺序是从小到大,不能从大到小

查找案例

1.相互独立的局部名称空间正常情况下不能够互相访问
    def func1():
        a = 1
        print(b)    
    def func():
        b = 2
        print(a)
    func1()  # 报错
    func2()  # 报错
    
2.局部名称空间嵌套
    先从自己所在的名称空间查找,然后由内而外依次查找
    a = '捉迷藏'
def func():
    a = '找到小明了'
    def func1():
        a = '找到小红了'
        def func2():
            a = '不想找了'
            def func3():
                a = '找不到了,不找了'
                print(a)
            func3()  # 第四个执行
        func2()  # 第三个执行
    func1()  # 第二个执行
func()  # 第一个执行
# 找不到了,不找了
'''
在上述代码中打印的a优先在func3()的函数体代码中查找,找不到去func2()的函数体代码中找,接着是func1(),func()
  全局名称空间,乃至内置名称空间
  ''' 

标签:函数,名称,func,空间,变量名,def
From: https://www.cnblogs.com/zyg111/p/16776891.html

相关文章

  • 函数参数
    目录前言函数参数位置参数关键字参数默认参数可变长形参*args接受多余的位置实参**kwargs接受多余的关键字实参*args**kwargs组合使用干点反人类的事!对传参的总结可变......
  • 函数参数和名称空间
    目录一.函数参数1.位置参数2.默认参数3.可变长形参4.可变长实参5.命名关键字参数(只做了解)二.名称空间1.什么是名称空间1.内置名称空间2.全局名称空间3.局部名称空间2.名......
  • 函数的参数、名称空间知识
    昨日内容回顾硬盘操作数据的原理数据在计算机硬盘上保存时是一次性的,数据保存后即不可能再对这段数据内部进行修改。计算机数据的删除实质是对保存数据部分硬盘状态的......
  • 函数参数、名称空间与作用域、名字的查找顺序
    函数参数、名称空间与作用域、名字的查找顺序目录函数参数、名称空间与作用域、名字的查找顺序一、函数参数1.形参与实参2.位置参数3.关键字参数4.默认参数5.可变长形参6.......
  • 函数参数和名称空间
    函数参数之位置参数"""补充:当子代码只有一行并且很简单的情况下可以直接在冒号后编写不用换行"""位置形参 函数定义阶段括号内从左往右依次填写的变量名 deffunc......
  • Python3 函数
    函数特点:完成某一个特定的功能代码重用保持一致性,易维护,可扩展性一函数定义数学函数python函数定义f(x)=2x+1deff(x):               #函数定义,f......
  • python(函数参数与名称空间)
    今日内容概要函数参数名称空间与作用域位置参数,关键字参数,默认参数,可变长参数,命名关键字参数名字的查找顺序今日内容详细函数参数之位置参数​ 在调用函......
  • python函数2
    今日内容概要函数参数名称空间与作用域名称的查找顺序函数名的多种用法今日内容详细函数参数值位置参数"""补充:当子代码只有一行并且很简单的情况下可以直......
  • Python函数-4
    一.不定长参数难度:3星Python函数中有两种不定长参数,第一种是*X,返回值是元祖类型,在传入额外的参数时可以不用指明参数名,直接传入参数值即可。第二种是**X,这种类型返回的是......
  • Python函数-4
    一.不定长参数难度:3星Python函数中有两种不定长参数,第一种是*X,返回值是元祖类型,在传入额外的参数时可以不用指明参数名,直接传入参数值即可。第二种是**X,这种类型返回的是......