2021-11-15

默认参数

   函数在定义阶段就可以给形参赋值了

      1.该形参在函数调用阶段如果不给值  则使用默认的

      2.该形参在函数调用阶段也可以继续给值  则使用你给的

# 定义学员注册功能

    def register(name, age, gender='male'):

    	print('%s:%s:%s' % (name, age, gender))

    register('jason', 18)

    register('tony', 28)

    register('kevin', 38)

    register('lili', 18, 'female')

    register('lili', 18, gender='female')

"""

位置 形参与默认值形参在定义的时候位置形参

必须在默认值形参的前面

"""

’‘’‘格式越简单的月靠前   格式越复杂的越靠后’‘’

可变长参数

#1.函数无论传入多少位置参数都可以正常运行

可变长参数

def func(x, y, *a):
    print(x, y, a)


func()
func(1)
func(1, 2, 3, 4, 5, 6, 7)  # 1 2 (3, 4, 5, 6, 7)
"""
*号在形参中的使用
    用于接收多余的位置  并组织成元组的形式赋值给*号后面的变量名
"""

 函数无论传入多少参数都可以正常运行

def index(x, y, **b):
    print(x, y, b)


index(y=2, x=1)  # 1 2 {}
index(y=2, x=1, u=222, k=111,l=444)   #1 2 {'u': 222, 'k': 111, 'l': 444}


"""
**号在形参中的使用
    用于接收多余的关键字参数 并组成字典的形式赋值给**号后面的变量名
"""

3.定义一个函数无论传入多少位置参数和关键字参数都可以正常运行

def index(*a, **b):
    print(a, b)


index()  # () {}
index(1, 2, 3, 4)  # (1, 2, 3, 4) {}
index(a=1, b=2, c=3)  # () {'a': 1, 'b': 2, 'c': 3}
index(1, 2, 3, 4, a=1, b=2, c=3)  # (1, 2, 3, 4) {'a': 1, 'b': 2, 'c': 3}
"""
墨守成规
      可变长形参  *与**后面的变量名其实是可以随便定义的
      但是python 中推荐使用
          *args    argument
          **kwargs   keyword arguments
def index(*args,**kwargs):
    pass
"""

def index(a, b ,c):
    print(a, b, c)
new_list = [11, 22, 33]

index(new_list)    # 肯定不行  列表是一个整体 相当于一个实参
index(new_list[0], new_list[1], new_list[2]) # 可以
'''r如果index形参是*args 列表里面有很多元素  如何实现按照位置一一传入'''

def index1(*args):
    print(args)
new_list1 = [11,22,33,44,55,66,77,88,99]
index1(*new_list1)  # (11, 22, 33, 44, 55, 66, 77, 88, 99)

"""
*号在实参中的使用
    会将列表、元组内的元素打散成位置参数的形式一一传值
"""
def index2(**kwargs):
    print(kwargs)

new_dict = {'username': 'jason','pwd': 123}
index2(**new_dict)  # index2(username='jason',pwd=123)
 {'username': 'jason', 'pwd': 123}

"""
**号在实参中的使用
   会将字典内的键值对打散成关键字参数传入
"""

4.函数参数补充

def register(name,age,*,sex,height):
    pass

# register('jason',18,'male'183)  错误

register('lili',18,sex='male',height='1.8m') # 正确使用


"""
sex heighut在传入实参的时候必须以关键字参数的形式

ps:该类型的参数几乎不用 也很少能碰到
"""

5.名称空间


  1.内置名称空间

        python 解释器提前给你定义好的
    print()
    len()
    ...

2.全局名称空间
       所有在py文件中顶格编写的代码运行之后都会存入全局名称空间

name ='jason'  # name 全局

def func():  # func 全局
    pass

if i:
    a=123  # a全局

for i in range(10):

    print(i)  # i全局

while True:

    a=123   # a 全局

 3.局部名称空间
      在函数体代码运行之后产生的都是局部名称空间
存货周期
     1. 内置名称空间
       python 解释器启动于关闭而创建和销毁
     2.全局名称空间
       随着py文件的运行与结束而创建和销毁n
     3.局部名称空间
       随着函数体代码的执行与结束而创建和销毁

4.名字的查找顺序

       在查找名字的时候 要先确定自己当前位置在哪

             1. 如果你在局部

                 局部>>>全局>>>内置

              2.如果你在全局

                  全局>>>内置

x = 111

def f1():

    x = 222

    def f2():

        x = 333

        def f3():

            x = 444

            def f4():

                x=555

                print(x)
            f4()

        f3()

    f2()

#  通过发f1 执行所有的函数
f1()

x = 111

def f1():

    x = 222

    def f2():

        x = 333

        def f3():

            x = 444

            def f4():
               
                print(x)
                 x=555      特列

            f4()

        f3()
    f2()

#  通过发f1 执行所有的函数
f1()

x = 111

def f1():

    x = 222

    def f2():

        x = 333

        def f3():

            x = 444

            def f4():
               
                print(x)
                 x=555    telie   
特列

            f4()

        f3()
    f2()

#  通过发f1 执行所有的函数
f1()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值