一、函数形参的动态参数

原因:为了拓展,对于实参数量不固定,故需要万能参数,即动态参数, *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. 安装Thinkphp5

    Thinkphp完全开发手册地址:https://www.kancloud.cn/manual/thinkphp5/118006 1.安装扩展mbstring扩展:sudo apt-get insta ...

  2. JVM总结-Java 虚拟机是怎么识别目标方法(下)

    1. 虚方法调用 在上一篇中我曾经提到,Java 里所有非私有实例方法调用都会被编译成 invokevirtual 指令,而接口方法调用都会被编译成 invokeinterface 指令.这两种指令, ...

  3. 20165205 预习作业三 Linux安装及学习

    Linux安装及学习 安装Ubuntu 1)安装版本 在安装VirtualBox时选择了VirtualBox 5.2.6 platform package 安装Ubuntu时选择了Ubuntu 16. ...

  4. gentoo intel 安装桌面

    首先增加 vim ~/.xinitrc [[ -f ~/.Xresources ]] && xrdb -merge ~/.Xresources # dbus before fcitx ...

  5. java中的排序--排序容器_TreeSet与TreeMap

    1.TreeSet:数据元素可以排序且不可重复. 对比: (1)Set接口:HashSet,元素必须重写hashcode和equals方法. (2)TreeSet:只要可以排序即可.去重:比较等于0即 ...

  6. OpenGL Hello World

    ▶ OpenGL 的环境配置与第一个程序 ● CUDA 中自带 OpenGL 需要的头文件和库,直接拉进项目里边去就行 ● VS项目属性右键,属性,C/C++ 目录,包含目录,添加 CUDA 的头文件 ...

  7. Maven私服安装

    下载安装包:nexus(https://www.sonatype.com/download-oss-sonatype) 默认用户密码字符串: adminAdministratorUseractive& ...

  8. range和xrange

    在python2.7中range()某个区间后,内存会立即创建区间内的所有数值,严重浪费内存,所以就出现了xrange():每次循环的时候生成一个数值 在python3版本中不存在xrange,只有r ...

  9. winform 之公共控件

    Button 按钮 属性: (一).布局: 1.AutoSize:控件是否根据内容调整大小 2.Location:当前按钮位于界面位置 3.Dock:控件锁定到界面位置 -None:不锁定 4.Mar ...

  10. jsp下载文件

    download.jsp web工程中下载xls文件 <%@ page language="java" import="java.util.*" page ...