• Python学习之路基础篇--10Python基础,函数进阶


    1 命名空间

      对于Python 来说命名空间一共有三种

      1 内置命名空间 —— Python 解释器

        就是Python 解释器一启动就可以使用的名字,储存在内置命名空间中。内置的名字在启动解释器的时候被加载进内存里

      2 全局命名空间 —— 我们所命名的,但不是函数中的代码

        是在程序从上到下被执行的过程中依次加载进内存中的,放置了我们所设置的所有变量名和函数名

      3 局部命名空间 —— 函数 

        就是函数内部定义的名字,当调用函数时,才会产生这个名称空间,随着函数执行的结束,这个命名空间又消失

      PS:

        1 在局部中可以使用全局、内置命名空间中的名字;在全局中可以使用内置命名空间的名字,但不能使用局部中定义的名字;在内置中不能使用局部和全局的名字

        2 正常情况下直接使用内置的名字,当在全局定义了和内置名字空间中同名的名字时,会使用全局的名字;自己有名字就用自己的,没有就一级级身上找,如果内置中还没有,就会报错;多个函数拥有多个独立的局部名字空间,不互相共享

    2 函数名

    def func():
        pass

      其中func 是函数的内存地址,函数名加(),是函数的调用,可以类比为:函数的内存地址() = 函数的调用

      函数名就是内存地址;函数名可以赋值;函数名可以作为容器类型(元组、列表和字典)的元素;函数名可以作为函数的返回值;函数名可以作为参数

    3 函数的作用域

      函数的作用域可以分为两种

      全局作用域 —— 作用在全局 —— 内置和全局名字空间中的名字都属于全局作用域 —— globals()

      局部作用域 —— 作用在局部 —— 函数(局部名字空间中的名字属于局部作用域)—— locals()

      对于不可变的数据类型来说,局部可以查看全局作用域中的变量,但是不能直接修改,如果想修改,需要在程序的一开始添加 global 声名,如果在一个局部(函数)内声名一个global 变量,那么这个变量在局部的所有操作将对全局的变量有效

    a = 1
    def func():
        global a
        a += 1
        print(a)
    func()

      对于 globals() 和 loclas() 方法

    a = 1
    b = 2
    def func():
        x = 'aaa'
        y = 'bbb'
        print(locals())    #1 打印当前
        print(globals())    #2 打印全局
    func()
    print(globals())    #3 打印全局
    print(locals())    #4 打印当前

      两者打印的是,以字典的形式打印出命名。2、3、4 打印的内容一致,1 打印的是函数内命名的情况

    4 函数的嵌套

      定义:就是内部函数可以使用外部函数的变量

    a = 1
    def func1():
        a = 2
        def func2():
            nonlocal a #声明了一个上面第一层局部变量
            a += 1  # 对不可变数据类型进行了修改  
            print(a)
        func2()
        print(a)
    func1()
    print(a)

      nocolal 只能用于局部变量,找上层中离当前函数最近一层的局部变量;声明 noncolal 的内部函数的变量修改会影响到离当前函数最近一层的局部变量;对全局无效,对局部也只是最近的一层有影响。

    5 闭包

      闭包就是内部函数调用外部函数的变量

    def outer():
        a = 1
        def innner():
            print(a)
        return inner
    inn = outer()
    inn()

      目的是保护函数内定义的值,并且节省内存空间,不用每次都定义一个a,直接用即可~

      来个三元运算

    # 取两个数的最大值
    def func(a,b):
        return a if a > b else b
    print(func(3, 5))

    6 小作业

     # 1 写函数,接收 n 个数字,求这些参数数字的和
     def sun_func(*args):
         total = 0
         for i in args:
             total += i
         return total
    # 2 读代码,回答:代码中打印出来的值 a、b 和 c 分别是什么?为什么?
    a = 10
    b = 20
    def test5(a, b):
        print(a, b)
    c = test5(b, a)
    print(c)
    # 得出的结果为:
    # 20 10 
    # None 
    # 3 写函数,检查获取传入列表或元组的对象的所有奇数位索引对应的元素,并将其作为新的列表返回给调用者
    def func(lis):
        return lis[1::2]
    print(func([1,2,3,4,5,6,]))
    # 4 写函数,判断用户传入的对象(字符串、列表、元组)长度是否大于5
    def func(x):
        return len(x) > 5
    print(func('dfs'))
    print(func([1,2,3,4,5,6,]))
    print(func((1,2,3,4,5,)))
    # 5 写函数,检查用户传入列表的长度是否大于2,如果大于,那么仅保留前两个长度的内容,并将新内容返回给调用者
    def func(lis):return lis[:2] # 如果列表长度不够的话,是不会报错的
    # 6 写函数,计算传入字符串中,数字、字母、空格以及其它 的个数 ,并返回结果
    def func(s):
        dic = {'n_digist':0,'n_alphabet':0,'n_blank':0,'n_other':0}
        for i  in s:
            if i.isdigit():
                dic['n_digist'] += 1
            elif i.isalpha():
                dic['n_alphabet'] += 1
            elif i.isspace():
                dic['n_blank'] += 1
            else:dic['n_other'] += 1
        return dic
    print(func('skjdfhwhihsdfjkh389fhsfhksf  [fahh=-=-'))
  • 相关阅读:
    macos删除本地快照
    mount error(13): Permission denied Refer to the mount.cifs(8) manual page (e.g. man mount.cifs) RHEL 7 配置samba(smb)文件共享报错
    增加samba用户提示Failed to add entry for user
    Linux中变量 $#, $@, $0, $1,$ 2, $*,$$,$?的含义
    虚拟主机是设置在httpd-vhosts.conf还是vhosts.conf还是httpd.conf
    linux 中useradd -s /sbin/nologin和/bin/false的区别
    Linux系统 smbpasswd 命令的用法?
    linux 下/etc/profile、/etc/bashrc、~/.bash_profile、~/.bashrc 文件的区别
    linux防火墙
    etc/selinux/config与etc/sysconfig/selinux区别
  • 原文地址:https://www.cnblogs.com/YS-0717/p/9431269.html
Copyright © 2020-2023  润新知