第十章函数进阶

今日内容

  • 函数的参数 动态参数

    • 动态接收位置参数

    • 动态接收关键字参数

  • 函数的注释

  • 名称空间

  • 函数的嵌套

  • global、nonlocal

    • global的宗旨

    • nonlocal宗旨

1.函数的参数 动态参数

动态接收位置参数:
# 动态位置参数
# def eat(*args): # 函数的定义阶段 *聚合(打包)
#     print(args) # tuple
#     print(*args) # 函数体中的*表示打散(解包)
def eat(*args):
pirnt('我想吃',args) eat('大米饭', '米饭', '饭')
# 收到的结果是一个tuple元组
动态接收参数的时候:动态参数必须在位置参数后面
无论是否给*args值,它都是一个元组(),若不给值,就是()
def eat(a, b,*args):
print("我想吃",args,a,b)

eat('大米饭','米饭','饭')
# 我想吃 ('饭',) 大米饭 米饭
# 默认参数放在最后边,通过关键字传参
def eat(a,b,*args,c='白菜'):
  print('我想吃',a,b,args,c)
eat('猪肉','粉条','豆腐','大葱')

结果:
我想吃 猪肉 粉条 ('豆腐', '大葱') 白菜

注意: 形参的顺序: 位置参数 , 动态参数 , 默认参数

动态接收关键字参数:
def func(*args,**kwargs):
  print(args,kwargs)

lst = [1,23,5]
dic = {'k1':4, 'k2':5}
func(*lst,**kwargs)
func(1,23,5,k1=4,k2=5)

最终顺序:

  位置参数 > *args(动态位置参数) > 默认值参数 > **kwargs(动态默认参数)

总结
# 总结:
  # *args(聚合位置参数)     大家伙都用的名字, 可以进行修改但是不建议修改
  # **kwargs(聚合关键字参数) 大家伙都用的名字, 可以进行修改但是不建议修改

  # 函数的定义阶段 * 和 ** 都是聚合
  # 函数体中 * 就是打散, *args将元组中的元组进行打散 *kwargs将字典的键获取

  # 实参和函数体:
  #     * 打散
  #     ** 实参时能够使用

2.函数的注释

def func(a, b):
  """
  计算两数相加
  :param a:
  :param b:
  :return: a + b
  """
return a + b
func(1, 10)

# print(a.__doc__)
# print(b.__doc__) # 查看函数的注释
# print(a.__name__) # 查看函数的名字

3.名称空间

  • 内置空间:Python解释器自带的空间

  • 全局空间:py文件中顶格写的就是全局空间

  • 局部空间:函数中就是局部空间

    取值顺序:

    # 1.局部空间
    # 2.全局空间
    # 3.内置空间

    加载顺序:

    # 1.内置空间
    # 2.全局空间
    # 3.局部空间

4.函数的嵌套

不管在什么位置,只要是函数名()就是在调用一个函数

5.global、nonlocal

global : 只修改全局,如果全局没有就创建一个全局变量

nonlocal : 只修改局部,修改离nonlocal最近的一层,上一层没有继续向上上层查找.只限在局部

a = 10
def func():
global a # 声明之后,就可以对全局变量进行修改
a += 1
print(a)
func() # nonlocal只能修改离nonlocal最近的一层,且不包括全局变量,如果没有就报错
def run():
a = 19
def func():
print('123')
def fun():
nonlocal a
a = 10
print(a)
fun()
run()

PythonDay10的更多相关文章

  1. Python--day10(函数(使用、分类、返回值))

    1.  函数 1.  函数: 完成特定功能的代码块,作为一个整体,对其进行特定的命名,该名字就代表这函数 现实中:很多问题要通过一些工具进行处理 => 可以将工具提前生产出来并命名 =>通 ...

  2. 路飞学城Python-Day10(practise)

    作业:现要求你写一个简单的员工信息增删该查程序,需求如下:当然此表在文件存储时可以这样表示1,Alex Li,22,13651054608,IT,2013-04-012,Jack Wang,28,13 ...

  3. 路飞学城Python-Day10

    [37.函数-命名空间]命名空间又称为name space,顾名思义就是存放名字的地方,存什么名字呢?举例说明,若变量 x = 1,存放于内存中,那名字x存放在哪里呢?名称空间正式存放名字x和1绑定关 ...

  4. python-day10(正式学习)

    目录 字符编码 计算机基础 文本编辑器存取文件的原理 python解释器执行py文件的原理 python解释器与文本编辑的异同 字符编码介绍 字符编码的分类 乱码分析 总结 文件操作 三种基本操作 文 ...

  5. 初学Python-day10 函数2

    函数 1.函数也是一种数据 函数也是一种数据,可以使用变量保存 回调函数(参数的值还是一个函数) 实例: def test(): print('hello world') def test1(a): ...

随机推荐

  1. Angular 如何修改启动的端口

    在默认的情况下 Angular 启动使用的是端口 4200. 如果修改这个启动的端口,比如说我们希望再  4100 端口上启动? 可以在启动的时候添加端口参数 --port. 例如使用下面的启动命令: ...

  2. PyQT5堆叠布局:切换界面(QStackedLayout)

    几乎所有的GUI界面都需要用到这个场景:在一个界面里面,点击不同的按钮显示不同的内容 在Qt设计师中没有堆叠布局,需要我们手动添加 在Qt设计师中,设计3个切换的页面,和一个主界面. 注意在主界面是两 ...

  3. jmeter csv Data Set Config 文件中带引号的数据转换问题(自动添加双引号解决办法)

    1.我们从csv中获取数据,在jmeter中使用这些数据,其中csv的数据如图,有的数据包含引号. 2.问题:我们获取的json数据,被自动添加了双引号 3.解决方式: 在CSV Data Set C ...

  4. Spark译文(二)

    PySpark Usage Guide for Pandas with Apache Arrow(使用Apache Arrow的Pandas PySpark使用指南) Apache Arrow in ...

  5. A. Be Positive

    A. Be Positive time limit per test 1 second memory limit per test 256 megabytes input standard input ...

  6. Keil工程Lib库文件的制作和运用

    最近看了百度手环开源项目,发现所有的算法都被封装成了一个lib文件在keil中调用 也是第一次学习到. 问题引出:为什么要做成lib库? 1.有些方案公司为了将自己写的关键部分源代码不进行公开,但是同 ...

  7. [CSP-S模拟测试]:最大值(数学+线段树)

    题目背景 $Maxtir$最喜欢最大值. 题目传送门(内部题128) 输入格式 第$1$行输入四个正整数$n,m,q$. 第$2$至$n+1$行中,第$i+1$行输入魔法晶石$i$的三种属性$(x_i ...

  8. webpack3升级webpack4

    cnpm i webpck@4 webpack-cli -D cnpm i webpack-cli -D cnpm update npm WARN deprecated extract-text-we ...

  9. 在mac中,npm安装或者卸载失败,提示没有权限

    在终端输入 sudo chown -R $USER /usr/local 输入开机密码

  10. vue下实现input实现图片上传,压缩,拼接以及旋转

    背景 作为一名前端工作人员,相信大家在开发系统的时候,经常有遇到需要这么一种需求,就是需要为用户保存上传的图片,很多小白遇到这个问题的时候,都会虎躯一震,以为会是一个棘手的问题,当你读完这篇文章的时候 ...