zoukankan      html  css  js  c++  java
  • Python第九课(函数2)

    Python第九课(函数2)    >>>转到思维导图>>>转到中二青年

    命名关键字参数

    在函数定义阶段,写在*和**可变长参数之间的形参

    在给命名关键字参数传值的时候,只能用关键字为期传值

    在定义阶段 给你感觉好像是z是默认值参数,放在了m这个位置参数的前面了,应该报错

    其实z和m都是命名关键字参数,不是默认值参数和位置参数

    1 def func(x,y=1,*args,z=3,m,**kwargs):
    2     print(x,y)
    3     print(args)
    4     print(z,m)
    5     print(kwargs)
    6 func(1,2,1,2,3,4,5,6,7,78,8,9,0,z=69,m=999,o=666999,l = 999666)
    View Code

    函数对象

    函数是第一类对象:函数名指向的值可以被当中的参数传递

    1.函数名可以被传递

     1 name = 'jason'
     2 x = name
     3 print(x)
     4 print(id(x))
     5 def func():
     6     print('from func')
     7 # print(func)
     8 print(id(func))
     9 f = func
    10  
    11 func()
    12 print(f)
    13 f()  # 其实指向的也是函数func指向函数体代码的内存地址
    View Code

    2.函数名可以被党组参数传递给其他函数

    1 def func():
    2     print('from func')
    3  
    4 def index(args):
    5     print(args)
    6     args()
    7     print('from index')
    8 # index(1)
    9 index(func)
    View Code

    3.函数名可以被当做函数的返回值

     1 def index():
     2     print('index')
     3  
     4  
     5 def func():
     6     print('func')
     7     return index
     8 res = func()
     9 print(res)
    10 res()
    View Code

    4.函数名可以被当做容器类型的参数

     1 # def func():
     2 #     print('func')
     3 # print(func())
     4 # l = [1,2,func,func()]  # [1,2,<function func at 0x000001F7D79899D8>,None]
     5 # print(l)
     6  
     7 # 循环打印项目功能提示信息 供用户选择 用户选择谁就执行谁
     8 def register():
     9     username = input('username>>>:').strip()
    10     pwd = input('password>>>:').strip()
    11     print(username,pwd)
    12     print('register ...')
    13 def login():
    14     print('login ...')
    15 def transfer():
    16     print('transfer ...')
    17 def shopping():
    18     print('shopping...')
    19 def pay():
    20     print('pay ...')
    21  
    22 msg = """
    23 1 注册
    24 2 登陆
    25 3 转账
    26 4 购物
    27 5 支付
    28 """
    29 func_dict = {
    30     '1':register,
    31     '2':login,
    32     '3':transfer,
    33     '4':shopping,
    34     '5':pay,
    35 }
    36 while True:
    37     print(msg)
    38     choice = input('请现在你想要执行的功能>>>:').strip()
    39     if choice in func_dict:
    40         func_dict.get(choice)()  # 函数名()
    41  
    42     # if choice == '1':
    43     #     register()
    44     # elif choice == '2':
    45     #     login()
    46     # elif choice == '3':
    47     #     transfer()
    48     # elif choice == '4':
    49     #     shopping()
    50     # elif choice == '5':
    51     #     pay()
    52     else:
    53         print('你输入的功能暂时没有')
    View Code

    函数的嵌套调用

    在函数内部调用其他函数可以将复杂的逻辑简单化

    def my_max(x,y):
        if x > y:
            return x
        return y
     
    def my_max4(a,b,c,d):
        res1 = my_max(a,b)
        res2 = my_max(res1,c)
        res3 = my_max(res2,d)
        return res3
    print(my_max4(1,2,10,4)) 

    函数的嵌套定义

    写一个函数,该函数用户可以通过传参的不同控制函数执行不同的功能

    def outer():
        x = 1
        print('outer')
        def inner():
            print('inner')
        # print(inner)
        return inner
     
    res = outer()
    # print(res)
    res() 

    名称空间

    名称空间是存放的变量名与变量值的内存地址的绑定关系的地方

    要想访问一个变量的值,必须先去名称空间中拿到对应的名字,才能够访问变量的值

    名称空间分类

    1.内置名称空间:Python解释器提前给你定义好的名字(已经存放到内置名称空间中了)

     len max min 

    2.全局名称空间:文件级别的代码

    x = 1
    if 1 ==1 :
       y = 2             
       print(y)
       while True:
       z = 3
    #x,y,z都会放到全局名称空间
    #if for while 无论嵌套多少层 它们内部所创建的名字都是全局名称空间的
    View Code

    3.局部名称空间:函数体内创建的名字都属于局部名称空间

    生命周期

    内置名称空间:只要python解释器已启动立马创建,关闭python解释器的时候内置名称空间自动销毁

    全局名称空间:只要你右键运行py文件会自动创建 ,py文件程序运行结束自动销毁 

    局部名称空间:函数被调用的时候自动创建  函数指向结束立即销毁(动态创建动态销毁)

    名称空间查找顺序

    需要先确定你当前在哪

    1.站在全局:全局 >>>内置

    2.站在局部:局部>>>全局>>>内置

    函数在定义阶段查找名字的顺序就已经固定了,不会因为函数的调用位置变化而改变

    x=111
    def outer():
        def inner():
            print('from inner',x)
        return inner
    f=outer()
    x = 222
    f()

    作用域

    全局作用域:全局有效

    # global 在局部修改全局的不可变数据类型
    # x = []  # 因为列表是可变类型
    x = 1  # 不可变类型
    username = 'jason'
    def func():
        # x.append('嘿嘿嘿')
        global x,username  # 修改全局变量 而不是创建局部名称空间
        x = 999
        username = 'egon'
    func()
    print(x)
    print(username)

    局部作用域:局部有效

    def func():
        x = 1
        def index():
            nonlocal x
            x = 2
        index()
        print(x)
    func()
    
    # global:局部修改全局 如果想修改多个 逗号隔开
    
    # nonlocal:局部修局部 如果想修改多个 逗号隔开

    END

  • 相关阅读:
    python类变量与成员变量,及模块中类变量共享
    python制作GUI界面---搞定软件界面编程
    pycharm运行PyQt5出现错误This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.
    pycharm安装包下载慢的问题解决
    DNS隧道实验
    关于虚拟机win Server 2003只能打开百度网页其他网页都打不开??
    Python如何将决策树dot文件转化为png文件
    如何将虚拟机win7成功联网
    关于虚拟机win2003忘记登录密码(待解决)
    虚拟机kali忘记密码后问题解决&&kali用桥接模式成功联网
  • 原文地址:https://www.cnblogs.com/renvip/p/11164830.html
Copyright © 2011-2022 走看看