函数进阶

2018-12-09 11:21:03来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

 

1. 动态传参

  *, ** :

  形参: 聚合

  位置参数* -> 元组

def func(*args, a, b, c):
    print(a, b , c, args)
func(1,2,3,4,5,6,7, a=8, b=9,c=10)

 

  关键字** -> 字典

def func(**kwargs):
    print(kwargs)
func(a=1, b=2, c=3, haha="呵呵", good="not bad")

 

  实参: 打散

  列表, 字符串, 元素 -> *

  字典 -> **

  形参顺序:

  位置, *args, 默认值, **kwargs

  "无敌传参"

    def func(*args, **kwargs): arguments参数 keyword-arguments关键字参数

      pass

复制代码
def hash(*args, **kwargs):
    pass
def id(*args, **kwargs): 
    pass
def input(*args, **kwargs): 
    pass
复制代码

 

  这几个函数都是这种"无敌传参"的模式

2. 作用域和名称空间

  名称空间: 用来存放名字(变量, 函数名, 类名, 引入的模块名)的

  1. 全局名称空间: 我们在py文件中自己写的变量, 函数.....

  2. 内置名称空间: 我们python解释器提供好的一些内置内容(print, input....)

  3. 局部名称空间: 在我们执行函数的时候.会产生一个局部名称空间. 放的是: 函数内部的内容(变量, 函数,类...)

  名称空间可能会有无数个, 局部名称空间而言. 相对是独立的.一般互不干扰

作用域:

  1. 全局作用域: 内置+全局

  2. 局部作用域: 局部

  globals() 查看全局作用

  locals() 查看当前作用域

复制代码
def num():
    a = 20
    b = 30
    print(locals()) # 查看当前作用域中的内容
    print(globals()) # 查看全局作用域中的内容
num()
复制代码

 

3. 函数的嵌套

  在函数中声明函数

  在内部函数中使用变量的时候, 查找顺序: 先找自己 -> 上一层 -> 上一层..全局 -> 内置

复制代码
def func1():
    print("1")
    def func2():
        print("2")
        def func3():
            print("3")
        print("4")
        func3()
        print(5)
    print("6")
    func2()
    print("7")
func1()   #  1 6 2 4 3 5 7
复制代码

 

4. nonlocal和global关键字

  global: 在局部引入全局变量

  nonlocal: 在局部...内层函数引入外层离他最近的那个变量.

  只举一个全局变量的例子

复制代码
flag = False 

def login():
    global flag  # 全局变量的调用
    uname = input("用户名:")
    upwd = input("密码:")
    if uname == "alex" and upwd == "123":
        flag = True
    else:
        flag = False

 

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:Python基础(字符串)第二天

下一篇:python自动化-作业1-1.登录接口、作业1-2多级菜单——A