1. 函数的动态参数

1.1 动态位置参数(*arges)

def func(*args):  # *arges 是万能(接受任意多个)的位置参数
print(args) #以元组的形式(1,2,3,4,5)输出
func(1,2,3,4,5) def func(*args): #* 在函数定义的时候叫做聚合
print(*args) # *args 将元组打散 1 2 3 4 5
func(1,2,3,4,5) def func(a,b,*args):
print(a,b,args) # 1 2 (3,4,5)
func(1,2,3,4,5) def func(a,b,*arges,c=6):
print(a,b,arges,c) #1 2 (3,4,5) 6
func(1,2,3,4,5) # 优先级:位置参数 > 动态位置参数 > 默认参数

1.2 动态关键字参数 (**kwargs)

def func(a,b,**kwargs):
print(a,b,kwags) # 1 2 {"c":3,"d":4} 字典(接受关键字的参数)
func(1,2,c=3,d=4) def func(a,b,**kwargs)
print(a,b,*kwargs) # *kwargs 打散会取键
func(1,2,c=3,d=4) # 1 2 c d

1.3 万能传参:

​ (动态位置参数,动态关键字参数)

def func(a,b,*args,c=1,d=2,**kwags):
print(a,b,*args,c,d,kwags)
func(1,2,3,4,c=5,d=6,e="alex",f="wusir")
# 1 2 3 4 5 6 {"e":alex,"f":wusir} def func(*arges,**kwargs):
print(arges,kwargs)
func(1,2,3,4,e=3,d=4,f=5)
#(1,2,3,4) {"e":4,"d":4,"f":5}
优先级:位置参数 > 动态位置参数 > 默认参数(关键字参数)> 动态关键字参数
lst = [1,2,3,4,5,6]
def func(*arges): #聚合
print(*arges) #再打散
func(*lst) # 先将lst打散 传入 dic = {"a":1,"b":2,"c":3}
def func(**kwargs):
print(kwargs)
func(**dic) #打散字典

2. 函数的注释

每写一个函数需注释  """ (回车) """
函数名.__doc__ #可查看函数的注释
函数名.__doc__ #查看函数的名字

3. 名称空间

内置空间:python中自带的文件,例如print/input
全局空间:当前py文件中需要开辟的空间存放在全局空间(顶头写)
局部空间:函数中开辟的空间就是局部空间 加载顺序:内置 > 全局 > 局部
取值顺序:内置 > 全局 > 局部 作用域:
全局作用域:内置空间 + 全局空间
局部作用域:局部空间

4. 函数嵌套

不管在什么位置,只要是 函数名+(), 就是在调用此函数。
函数执行后,函数体中开辟的空间会自动销毁。 同一级函数之间的数据不能共享。
#函数嵌套:
def func():
a = 1
def foo():
b=2
print(b)
print(a)
def f1():
print(b)
return f1()
return foo()
print(func()) # 2 1 2 None
#函数互相引用
def func():
a = 1
foo()
print(a)
def foo():
b=2
print(b)
func() # 2 1
def func():
a = 1
def b():
print(a) #没有调用
def foo():
b = 1
def z():
print(func) # 同级函数 会打印 func的地址
print(b)
ret = z()
func()
return ret # None
def run():
foo()
print(run()) # None

5. 函数变量修改

5.1 global

声明修改全局变量的值。

a = 10
def func():
global a #声明修改全局变量的值
a += 1
print(a) # 11
func()

5.2 nonlocal

在外层的函数中,修改局部空间的变量值.完全不涉及全局变量,只修改离它最近的一层,最近的一层没有变量继续向上找,直到找到最外层函数

a = 10
def func():
def f1():
a = 30
def foo():
nonlocal a #只修改近的 a
a += 1
print(a) # 31
foo()
print(a) # 31
f1()
func()
print(a) # 10 # 31 31 10

python 10 动态参数的更多相关文章

  1. python函数动态参数详解

    Python的动态参数: 1,参数前一个"*":在函数中会把传的参数转成一个元组. def func (*args): print(args) func(123,1,2,'a') ...

  2. python 函数动态参数,名称空间,global,nonlocal

    ##################################总结######################################动态参数 *args:位置参数动态传参,接收到的是元 ...

  3. python 函数 动态参数 和嵌套

    1.动态参数 是可以接收任意的参数.一种方式, 1,位置的动态传参, 写法是: *参数名 接收的参数是tuple类型举个例子:def yue(*food): print(food)yue(" ...

  4. python之动态参数 *args,**kwargs和命名空间

    一.函数的动态参数 *args,**kwargs, 形参的顺序1.你的函数,为了拓展,对于传入的实参数量应该是不固定,所以就需要用到万能参数,动态参数,*args, **kwargs 1,*args ...

  5. Day 10 动态参数&名称空间,局部全部.函数嵌套&global nonlocal关键字.

    一.动态参数#形参 有3种动态参数#*args 动态参数,不定长参数def func (*args): print(args,type(args))func(1,2,"alex", ...

  6. python day- 10 动态参数 函数的嵌套 命名空间和作用域 global和nolocal

    一.动态参数: 动态参数是形参的一类 分为:动态位置参数(* + 函数名)表示 调用后返回的是元祖 动态关键字参数(** + 函数名)表示 形参的排列顺序: 位置参数     >   动态位置参 ...

  7. python之动态参数 *args,**kwargs(聚合,打散--转载

    转自https://www.cnblogs.com/ellisonzhang/p/10243122.html 一.函数的动态参数 *args,**kwargs, 形参的顺序 1.你的函数,为了拓展,对 ...

  8. python之动态参数 *args,**kwargs(聚合,打散)

    一.函数的动态参数 *args,**kwargs, 形参的顺序1.你的函数,为了拓展,对于传入的实参数量应该是不固定,所以就需要用到万能参数,动态参数,*args, **kwargs 1,*args  ...

  9. python(3)-动态参数实现字符串格式化

    s1 = "{0} ===> {1}" s = s1.format('lilei', 'boy') print(s) l = ['lilei', 'boy'] s = s1. ...

随机推荐

  1. Java--重载与重写的区别

    1.重写必须继承,重载不用.2.重写的方法名,参数数目相同,参数类型兼容,重载的方法名相同,参数列表不同.3.重写的方法修饰符大于等于父类的方法,重载和修饰符无关.4.重写不可以抛出父类没有抛出的一般 ...

  2. linux初学者-普通磁盘分区篇

    linux初学者-普通磁盘分区篇 磁盘是计算机的重要组成部分,是记录数据的场所.在使用磁盘时,经常需要对其进行分区来实现不同的用途.下文将介绍在linux系统中普通磁盘分区的方法. "fdi ...

  3. 287. 寻找重复数 Java解法

    287. 寻找重复数 这题的难点就在于下面的说明了,我们先不管下面的那些说明的要求,用常规的解法来解答下上的题目. 排序思想解法 先把原来的数组进行排序,然后逐个遍历,一旦发现后一个元素和当前的元素相 ...

  4. 7kyu (难度系数kyu阶段数值越大难度越低) 数组分组及求和

    几个人排成一排,分成两队.第一个人进入一队,第二个人进入第二队,第三个人进入第一队,以此类推. 给定一个正整数的数组(人的权重),返回两个整数的新数组/元组,其中第一个是第1组的总重量,第二个是第2组 ...

  5. bootstrap datatable editor 扩展

    需求: a. 表单样式更改. b. 表单大小更改. 思路: a. 通过设置modal css更改样式和大小.缺点,全局性的更改. b. 更改bootstrap-editor,可以通过某种方式将参数传入 ...

  6. Windows 使用 helm3 和 kubectl

    简介: 主要原因是,我不会 vim ,在 linux 上修改 charts 的很蹩脚,所以就想着能不能再 windows 上执行 helm 命令,将 charts install linux 上搭建的 ...

  7. 从后端到前端之Vue(五)小试路由

    一开始我还以为vue的路由只能用在工程化的项目里面呢,然后研究了一下才发现,在脚本化里面也是可以用的.其实呢不管在哪里用,把原理研究明白就对了. 一. 官网demo 这里不得不吐槽一下官网,写的不清不 ...

  8. 通过ping命令了解三层转发流程

    ping命令:因特网包探索器.本文主要通过路由器两端不同网段PC互ping来讲解三层转发流程. 例子:PC-A是如何 ping 通 PC-C 的,有几种情况? 说明:1.在条件1阶段PC-C不会刷新a ...

  9. 2019前端面试系列——HTTP、浏览器面试题

    浏览器存储的方式有哪些 特性 cookie localStorage sessionStorage indexedDB 数据生命周期 一般由服务器生成,可以设置过期时间 除非被清理,否则一直存在 页面 ...

  10. Java的自动装箱/拆箱

    概述 自JDK1.5开始, 引入了自动装箱/拆箱这一语法糖, 它使程序员的代码变得更加简洁, 不再需要进行显式转换.基本类型与包装类型在某些操作符的作用下, 包装类型调用valueOf()方法将原始类 ...