一、函数形参的动态参数

原因:为了拓展,对于实参数量不固定,故需要万能参数,即动态参数, *args   **kwargs

# def sum1(*args): # 在函数定义时,在*位置参数,聚合。
# *args将所有的实参的位置参数聚合到一个元组,并将这个元组赋值给args

1.1*args的聚合

例如:利用函数写个计算器

def sum1(*args):
count = 0
for i in args:
count =count + i
return count
print(sum1(1,2,3))

需要求和的数据不固定,可以使用*args来代替形参

1.2*args的打散与聚合

l1 = [1,2,3]
l2 = [111,22,33,'alex']
l3 = 'alex'
def func(*args):
print(args) #(1, 2, 3, 111, 22, 33, 'alex', 'a', 'l', 'e', 'x') 元组
   print(*args)    # 1 2 3 111 22 33 alex a l e x  字符串

func(*l1,*l2,*l3) 

可以将实参内的数据打散。

2.**kwargs

def trans_para(*args,**kwargs):
print(args,type(args))
print(kwargs,type(kwargs))
trans_para("jinxin",12,[1,2,3,4],(1,4,7),{"a":"123","c":456},country="china",name='alex')
结果为:

('jinxin', 12, [1, 2, 3, 4], (1, 4, 7), {'a': '123', 'c': 456}) <class 'tuple'>
{'country': 'china', 'name': 'alex'} <class 'dict'>

可以接受类似字典的键值对的数据

3.形参的顺序 :   位置参数,*args,默认参数 ,**kwargs

def func(a,b,*args,sex ='男',**kwargs,):
print(a,b)
print(sex)
print(args)
print(kwargs)
func(1,2,11,22,34,5,6,sex = 'nv',name = 'alex',age=1000)
结果:

1 2
 nv
(11, 22, 34, 5, 6)
{'name': 'alex', 'age': 1000}

二、命名空间

命名空间分为:1.全局命名空间

2.局部命名空间(临时命名空间)

3.内置命名空间

全局命名空间:在函数以外的变量
局部命名空间:在函数内的变量
内置命名空间:内置的函数,python解释器的内置方法
作用域:
全局作用域 :全局名称空间 内置名称空间
局部作用域:局部命名空间(临时)
取值顺序:就近取值
局部名称空间————》全局名称空间————————》内置名称空降 单向从小到大
加载顺序:
       内置名称空降——————》全局名称空间————————————》局部名称空间

三、global 与 nonlocal

def func1():
# count = 3
count = count + 1 #local variable 'count' referenced before assignment
print(count)
func1()

如果你在局部名称空间,对一个变量进行修改,那么解释器会认为你的这个变量在局部中已经定义

但是对于上面的例题,局部中没有定义,也报错。

global的作用

1、在局部名称空降声明一个全局变量

def fun1():
global name
name = 'alex'
fun1()
print(name)

2、在局部名称空间可以对全局变量进行修改

count = 1
def func1():
global count
count = count +1
print(count)
func1()
print(count)

3、nonlacal的作用

子函数对父函数的变量(此变量不能是全局变量)进行修改,并且从那层及以下此变量全部发生改。

def func1():
count = 666
def func2():
nonlocal count # count为非全局变量
count +=1
print(count) # 667
return count
func2()
print(count) # 667
func1()

python基础学习Day10 函数形参的动态参数、*args **kwargs 命名空间 global 与 nonlocal的更多相关文章

  1. 动态参数(*args,**kwargs),命名空间和作用域,global和nonlocal,函数的嵌套

    1. 动态参数 位置参数的动态参数: *args 关键字参数的动态参数 : **kwargs 顺序: 位置,*args,默认值,**kwargs 在形参上*聚合, **聚合 在实参上*打散, **打散 ...

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

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

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

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

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

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

  5. python基础学习之函数基础和部分内置函数

    在函数调用的时候,必备参数必须要传入 函数定义: def  函数名: 代码块pass return  返回值 函数名命名规则: 字母.数字和下划线组成,和变量命名规则一致 pass在这里表示什么都没有 ...

  6. python基础语法5 函数定义,可变长参数

    函数 1.什么是函数 函数就是一种工具. 可以重复调用 2.为什么要用函数 1.防止代码冗(rong)余 2.代码的可读性差 3.怎么用函数 1.定义函数-->制造工具 2.调用函数--> ...

  7. python基础学习Day9 函数的初识,实参、形参、

    1.函数 def my_len(): l = [,,,,,,] count = for i in l: count += print(count) my_len() 定义的my_len()方法时,其结 ...

  8. python基础学习2 函数变量与赋值

    学习的第一步,就是通常的输出函数:print() 1.基础主要学习了变量的赋值,变量名可以疑字母.数字.下划线(_)进行命名,但是不能以数字开头 变量的赋值:变量名 = 变量值 2.模块的导入,和调用 ...

  9. Python基础学习四 函数

    1.内置函数 Python内置了很多有用的函数,是可以直接调用的. 参考链接:https://docs.python.org/3/library/functions.html 调用函数的时候,如果传入 ...

随机推荐

  1. Win7 发生验证错误 要求的函数不受支持

    今天登陆服务器突然登不上了,给我报了一个错误“发生验证错误 要求的函数不受支持”,用同事的win7电脑和win10电脑都可以,就是我的不行,气死我了,然后我百度百度啊,用了好几种“说用了就OK”的办法 ...

  2. 让MySql支持表情符号(MySQL中4字节utf8字符保存方法)

    UTF-8编码有可能是两个.三个.四个字节.Emoji表情是4个字节,而MySQL的utf8编码最多3个字节,所以数据插不进去. 解决方案:将编码从utf8转换成utf8mb4. 1. 修改my.in ...

  3. 常见sql注入的防范总结

    在平时的开发过程中,我们可能很少会刻意的去为项目做一个sql注入的防范,这是因为你可能因为使用了某些框架,而无意间已经有了对应sql注入的一些防范操作(比如mybatis使用#{XX}传参,属于预编译 ...

  4. Windows Defender 无法启动

    最近win10 企业版操作系统中,Windows Defender  无法 启动,并提示消息 : to allow this app run , contact your security admin ...

  5. spring事务管理实现原理-源码-传播属性

    转载请标识 https://me.csdn.net/wanghaitao4j https://blog.csdn.net/wanghaitao4j/article/details/83625260 本 ...

  6. 19.纯 CSS 创作一种有削铁如泥感觉的菜单导航特效

    原文地址:https://segmentfault.com/a/1190000014836748 感想: 把原元素隐藏,利用伪元素::before 和 ::after 各取上下一半 clip-path ...

  7. 16.纯 CSS 创作一个渐变色动画边框

    原文地址:https://segmentfault.com/a/1190000014785816 感想:边框是伪元素::after来的: HTML代码: <div class="box ...

  8. exe加载DLL的时候会有一系列的搜索路径

    假如安全DLL搜索模式启用,搜索顺序如下: 1. 应用程序所在的路径 2. Windows SYSTEM目录.通过调用GetSystemDirectory函数可以获取这个目录的路径. 3. 16位系统 ...

  9. leetcode1013

    class Solution(object): def canThreePartsEqualSum(self, A: 'List[int]') -> bool: n = len(A) sums ...

  10. HTML页面禁用Enter键自动提交表单

    今天在开发页面时,遇到一个小BUG,,如下图 在页面的文本框获取焦点之后,再按键盘上的Enter键,页面form就会自动提交.如下是页面禁止Enter自动提交代码: document.onkeydow ...