51学通信论坛2017新版

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2503|回复: 3
打印 上一主题 下一主题

1.16.2 函数进阶(非固定参数、全局与局部变量)、返回值、嵌套函数

[复制链接]

 成长值: 15613

  • TA的每日心情
    开心
    2022-7-17 17:50
  • 2444

    主题

    2544

    帖子

    7万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    74104
    跳转到指定楼层
    楼主
    发表于 2018-4-15 21:35:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    非固定参数
    若你的函数在定义时不确定用户想传入多少个参数,就可以使用非固定参数。
    1. def stu_register(name,age,*args): # *args 会把多传入的参数变成一个元组形式
    2.     print(name,age,args)

    3. stu_register("Alex",22)
    4. #输出
    5. #Alex 22 () #后面这个()就是args,只是因为没传值,所以为空

    6. stu_register("Jack",32,"CN","Python")
    7. #输出
    8. # Jack 32 ('CN', 'Python')
    复制代码
    还可以有一个**kwargs。
    1. def stu_register(name,age,*args,**kwargs): # *kwargs 会把多传入的参数变成一个dict形式
    2.     print(name,age,args,kwargs)

    3. stu_register("Alex",22)
    4. #输出
    5. #Alex 22 () {}#后面这个{}就是kwargs,只是因为没传值,所以为空

    6. stu_register("Jack",32,"CN","Python",sex="Male",province="ShanDong")
    7. #输出
    8. # Jack 32 ('CN', 'Python') {'province': 'ShanDong', 'sex': 'Male'}
    复制代码

    回复

    使用道具 举报

     成长值: 15613

  • TA的每日心情
    开心
    2022-7-17 17:50
  • 2444

    主题

    2544

    帖子

    7万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    74104
    沙发
     楼主| 发表于 2018-4-15 21:44:29 | 只看该作者
    局部变量 
    1. name = "Alex Li"
    2. def change_name(name):
    3.     print("before change:",name)
    4.     name = "金角大王,一个有Tesla的男人"
    5.     print("after change", name)
    6. change_name(name)
    7. print("在外面看看name改了么?",name)
    复制代码
    输出
    1. before change: Alex Li
    2. after change 金角大王,一个有Tesla的男人
    3. 在外面看看name改了么? Alex Li
    复制代码
    全局与局部变量
    在子程序中定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量。
    全局变量作用域是整个程序,局部变量作用域是定义该变量的子程序。
    当全局变量与局部变量同名时:
    在定义局部变量的子程序内,局部变量起作用;在其它地方全局变量起作用。




    回复 支持 反对

    使用道具 举报

     成长值: 15613

  • TA的每日心情
    开心
    2022-7-17 17:50
  • 2444

    主题

    2544

    帖子

    7万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    74104
    板凳
     楼主| 发表于 2018-4-15 21:47:58 | 只看该作者
    返回值 
    要想获取函数的执行结果,就可以用return语句把结果返回
    注意:
    • 函数在执行过程中只要遇到return语句,就会停止执行并返回结果,so 也可以理解为 return 语句代表着函数的结束
    • 如果未在函数中指定return,那这个函数的返回值为None


    回复 支持 反对

    使用道具 举报

     成长值: 15613

  • TA的每日心情
    开心
    2022-7-17 17:50
  • 2444

    主题

    2544

    帖子

    7万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    74104
    地板
     楼主| 发表于 2018-4-15 21:52:42 | 只看该作者
    嵌套函数  看上面的标题的意思是,函数还能套函数?of course
    1. name = "Alex"

    2. def change_name():
    3.     name = "Alex2"

    4.     def change_name2():
    5.         name = "Alex3"
    6.         print("第3层打印",name)

    7.     change_name2() #调用内层函数
    8.     print("第2层打印",name)


    9. change_name()
    10. print("最外层打印",name)
    复制代码
    执行结果是:
    1. 第3层打印 Alex3
    2. 第2层打印 Alex2
    3. 最外层打印 Alex
    复制代码
    此时,在最外层调用change_name2()会出现什么效果?
    没错, 出错了, 为什么呢?嵌套函数的用法会了,但它有什么用呢?下节课揭晓。。。


    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    Archiver|手机版|小黑屋|51学通信技术论坛

    GMT+8, 2025-1-31 11:59 , Processed in 0.131960 second(s), 30 queries .

    Powered by Discuz! X3

    © 2001-2013 Comsenz Inc.

    快速回复 返回顶部 返回列表