前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >day 10 函数的进阶

day 10 函数的进阶

作者头像
py3study
发布2020-01-20 16:47:28
2920
发布2020-01-20 16:47:28
举报
文章被收录于专栏:python3

动态传参 (重点)  *    **

形参

 * args在形参位置, *表示不定参数--接受的是位置参数

  接受到的位置参数的动态传参:  都是元组

形参的顺序:

位置  *args 默认值  **kwargs   以后写参数,可以随意的进行搭配

def chi(zhushi, cai, fushi, tang, tiandian):

    print(zhushi,cai,fushi,tang,tiandian)

chi("大碗大米饭", "火爆大头菜", "把子肉", "西红柿鸡蛋汤", "烤地瓜")

chi("小碗大米饭", "火爆大头菜") # 参数不够

形参的顺序(重点):

  位置  *args  默认值  **kwargs

以后写参数. 可以随意的进行搭配, 但是, 顺序不能串

**kwargs在形参表示动态传参--关键字参数,关键字动态传参接收到的是字典

**在形参表示动态传参-关键字参数

关键字动态传参接收到的是字典

def func(**kwargs):  # 也是聚合. ** 聚合成字典

    print(kwargs)

# func(1,2,3,4,5,6,7) # 位置参数. 报错

func(a=1, b=2, c=3, haha="呵呵", good="not bad")

实参

*在实参的是打散,把列表,元组,字符串打散成位置参数进行传递

** 在形参表示动态传参--关键字参数;打散,打散成关键字

关于*和**

    形参:   聚合

              位置参数*   ->元组

              关键字**   ->  字典

    实参:   打散

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

              字典         ->**

无敌传参

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

            pass

作用域(重要)和名称空间

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

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

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

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

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

作用域:

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

2.局部作用域:   局部

从全局找局部-> 找不到

从局部找全局-> 可以找到

怎么查看全局或局部中的内容:

  globals  全局作用域: 内置+全局名称空间

  locals  查看当前作用域的内容

def chi():

    a = 20

    b = 30

    print(locals()) # 查看当前作用域中的内容

    print(globals()) # alex,老男孩儿, 武sir, 全局作用域中的内容

chi()

print(locals()) # 全局

print(globals()) # 全局

函数的嵌套

nonlocal和global   关键字(重点)

global  表示从全局把一个变量引入局部,后面使用的都是全局变量

nonlocal   在局部,寻找离他最近的外层的一个变量

如果没有global和nonlocal  ,查找的顺序:自己,上一层,上一层,上一层

函数的互相调用

def func1():

    print("我是神器的func1")

def func2():

    func1()

    print("我是神器的func2")

def func3():

    print("我是神器的func3")

    # func5()

def func4():

    func3()

    print("我是神器的func4")

def func5():

    func2()

    func3()

    print("我是神器的func5")

def func6():

    func5()

    print("我是神器的func6")

    func3()

    func1()

func6()

def outer():

    def inner():

        print("我的天哪")

    print("还可以这样写???")

    inner()

outer()

inner() # 在全局不能找到局部的内容

def func1():

    print("1")

    def func2():

        print("2")

        def func3():

            print("3")

        print("4")

        func3()

        print(5)

    print("6")

    func2()

    print("7")

func1()

全局变量一般是不能随意的修改的

a = 10

def func():

    # 慎用.

    global a  # global 表示从全局把一个变量引入到局部, 后面使用的a都是全局变量

    a += 10 # ?? a = a + 10 # 现在的a是全局的, 你现在视图改全局变量

    print("里面的打印",a)

func()

print("外面的打印", a)

a = 10

def func():

    def inner():

        # 慎用.

        global a  # global 表示从全局把一个变量引入到局部, 后面使用的a都是全局变量

        a += 10 # ?? a = a + 10 # 现在的a是全局的, 你现在视图改全局变量

        print("里面的打印",a)

    inner()

func()

print("外面的打印", a)

nonlocal  在局部, 寻找离他最近的外层的一个变量

a = 50

def func1():

    # a = 10 # 局部

    def func2():

        nonlocal a # 不找全局, global找全局

        a += 10 # a = a + 10 python不让这么干

        print("func2", a)

    func2()

    print(a)

func1()

print(a)

如果没有nonlocal和global 查找的顺序: 自己, 上一层, 上一层, 上一层

def func0():

    a = 50

    def func1():

        a = 10 # 局部

        def func2():

            nonlocal a # 不找全局, global找全局

            a += 10 # a = a + 10 python不让这么干

            print("func2", a)

        func2()

        print(a)

    func1()

    print(a)

func0()

a = 1

def fun_1():

    a = 2

    def fun_2():

        nonlocal a

        a = 3

        def fun_3():

            a = 4

            print(a)

        print(a)

        fun_3()

        print(a)

    print(a)

    fun_2()

    print(a)

print(a)

fun_1()

print(a)

flag = False

def login():

    global flag

    uname = input("用户名:")

    upwd = input("密码:")

    if uname == "alex" and upwd == "123":

        flag = True

    else:

        flag = False

def fatie():

    if flag == True:

        print("可以发帖")

    else:

        print("滚去登录")

login()

fatie()

fatie()

fatie()

fatie()

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/04/21 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档