可变长参数

一、形参

位置形参

默认形参

二、实参

位置实参

关键字实参

三、可变长参数之*

def func(name,pwd,*args):
print('name:',name,'pwd:',pwd)
print(args)
return 1

res = func('nick',12345,18,180,18000)
print(res)

#name: nick pwd: 12345
#(18, 180, 18000)
#

四、可变长参数之**

def func(name,pwd,**kwargs):
print('name:',name,'pwd:',pwd)
print(kwargs)
return 1

res = func('nick',12345,age = 18,height = 180,wage = 18000)
print(res)

name: nick pwd: 12345
{'age': 18, 'height': 180, 'wage': 18000}
1

五、*tuple的应用

def func(name,pwd,x,y,z):
print('name:',name,'pwd:',pwd)
print(x,y,z)
return 1

tuple = (1,2,3)
res = func('nick',12345,*tuple) #将tuple打散成位置实参传给位置形参
print(res)

name: nick pwd: 12345
1 2 3
1

六、**dict的应用

def func(name,pwd,x,y,z):
print('name:',name,'pwd:',pwd)
print(x,y,z) #x, y, z必须和字典的key一一对应,若dict = {'a': 4,'b': 5,'c': 6},则print(a,b,c)
return 1

dict = {'x':4,'y':5,'z':6}
res = func('nick',12345,**dict) #将dict打散成关键字实参传给位置形参
print(res)

name: nick pwd: 12345
4 5 6
1

七、关于参数的应用

#例一

def func(x, y, f = 0, *args, **kwargs):
print(f'f=',f)
print(args)
print(kwargs)
return x + y
res = func(1, 2, 3, a = 4, b = 5, c=6) #一一对应,此时默认形参f = 0接受位置实参3,args可以不接收值
print(res)

f= 3
()
{'a': 4, 'b': 5, 'c': 6}
3

#例二

def func(x, y, f = 0, *args, **kwargs):
print(f'f=',f)
print(args)
print(kwargs)
return x + y
res = func(1, 2, a = 4, b = 5, c=6) #一一对应,此时默认形参f = 0没有对应接收值,默认为0,args可以不接收值
print(res)

f= 0
()
{'a': 4, 'b': 5, 'c': 6}
3

#例三

def func(x, y, f = 0, *args, **kwargs):
print(f'f=',f)
print(args)
print(kwargs)
return x + y
res = func(1, y = 2, a = 4, b = 5, c=6) #关键字实参y = 2会自己找关键字y,1是位置实参一一对应
# res = func(y = 2, 1, a = 4, b = 5, c=6) #一一对应,关键字实参一定要放在位置实参的后面,否则y=2赋给y,1对应的也是y,则会报错
print(res)

f= 0
()
{'a': 4, 'b': 5, 'c': 6}
3

函数的对象

  1. 引用

  2. 作为函数的参数

  3. 作为函数的返回值

  4. 作为容器元素

函数的嵌套

def f1():
def f2():
pass
f1()

名称空间与作用域

名称空间

内置名称空间

Python解释器启动的时候生成,如len/int/dict

全局名称空间

文件执行的时候生成

局部名称空间

函数调用的时候生成

执行顺序

内置 ---> 全局 --->局部

查找顺序

当前位置 --->局部 --->全局 --->内置

# 查找顺序:当前位置-->局部-->全局-->内置
x = 1
def f1():
x = 2
print(x) #当前位置 结果: 2
f1()

x = 1
print(x) #全局 结果: 1
def f1():
x = 2
f1()

x = 1
def f1():
x = 2
f1()
print(x) #全局 结果:1

x = 1
def f1():
print(x) #局部没有x的值,去全局查找 结果:1
f1()

作用域

产生作用的范围

全局作用域

全局+内置名称空间中的变量

x = 1
def f1():
x = 3
f1()
print(x)

# 1
x = 1 和 x = 3 两个x之间毫无关系
 

局部作用域

局部名称空间的变量,不同的函数具有不同的作用域

def f1():
x = 1
def f2():
x = 3
print(x)
f1()

#
x = 1 和 x = 3的两个x毫无关系

注意:全局作用域和局部作用域互不干涉。

global

x = 1
def f1():
global x #声明x为全局x
x = 3
f1()
print(x)

nonlocal

针对嵌套局部函数

def f1():
x = 1
def f2():
nonlocal x #取代x = 1
x = 3
print()
f1()

#

可变类型

lt = [1,2,3]

def f1():
lt.append(4) f1()
print(lt)

#[1,2,3,4]

作用域关系:对于可变类型不适用,仅适用不可变类型。

【0809 | Day 12】可变长参数/函数的对象/函数的嵌套/名称空间与作用域的更多相关文章

  1. Python 函数对象-函数嵌套-名称空间与作用域-闭包函数

    今日内容: 1. 函数对象 函数是第一类对象: 指的是函数名指向的值可以被当中数据去使用 1.可以被引用 2.可以当做参数传给另一个函数 3.可以当做一个函数的返回值 4.可以当做容器类型的元素 2. ...

  2. Noah的学习笔记之Python篇:函数“可变长参数”

    Noah的学习笔记之Python篇: 1.装饰器 2.函数“可变长参数” 3.命令行解析 注:本文全原创,作者:Noah Zhang  (http://www.cnblogs.com/noahzn/) ...

  3. CSIC_716_20191109【函数的语法,以及函数的分类,可变长参数*args】

    函数 定义.作用.及使用方式 函数是一种工具,可以被重复调用. 使用函数可精简重复代码,减少冗余,增加代码的可读性. 函数要先构造函数,然后调用函数. 构造及调用函数的语法结构 关键字def  函数名 ...

  4. python全栈开发-Day9 函数对象、函数嵌套、名称空间与作用域

    一 .函数对象 一 .函数是第一类对象,即函数可以当作数据传递 可以被引用 可以当作参数传递 返回值可以是函数 可以当作容器类型的元素 二. 利用该特性,优雅的取代多分支的if def foo(): ...

  5. go实例—函数或方法的可变长参数

    支持可变长参数列表的函数可以支持任意个传入参数,比如fmt.Println函数就是一个支持可变长参数列表的函数. 需要注意的是,可变长参数应该是函数定义的最右边的参数,即最后一个参数 package ...

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

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

  7. C++ 系列:函数可变长参数

    一.基础部分 1.1 什么是可变长参数 可变长参数:顾名思义,就是函数的参数长度(数量)是可变的.比如 C 语言的 printf 系列的(格式化输入输出等)函数,都是参数可变的.下面是 printf ...

  8. python学习笔记-函数与可变长参数

    一.函数 1. def test(x): y=x+1 return yprint(test) #这是打印函数在内存中的地址 过程:就是没有返回值的函数 在python中过程也是函数,就算没哟返回值,也 ...

  9. python 函数可变长参数

    python中的可变长参数有两种: 一种是非关键字参数(*元组),另一种是关键字参数(**字典) 非关键字可变长参数: """ 非关键字可变参数,一个星号作为元组传入函数 ...

随机推荐

  1. jieba GitHUb 结巴分词

    1.GitHub jieba-analysis 结巴分词: https://github.com/fxsjy/jieba 2.jieba-analysis 结巴分词(java版): https://g ...

  2. scrapy实战7爬取搜狗微信:

    爬取微信热门文章标题,内容,内容地址,微信公众号,公众号地址,发布日期等 如图 源码地址:https://github.com/huwei86/sougouweixin

  3. 使用@Transactional注意的问题

    @Transactional 基本原理概述 在应用系统调用声明@Transactional 的目标方法时,Spring Framework 默认使用 AOP 代理,在代码运行时生成一个代理对象,根据@ ...

  4. .Net项目中NLog的配置与使用

    引言: 因为之前在项目开发中一直都是使用的Log4Net作为项目的日志记录框架,最近忽然感觉对它已经有点腻了,所以尝试着使用了NLog作为新项目的日志记录框架(当然作为一名有志向的攻城狮永远都不能只局 ...

  5. 微信小程序支付以及微信退款开发

    最近公司项目急着测试,需要开发微信小程序+微信支付+微信退款,本着这几天的一些研究,决定记录一下开发的过程. 本着知识分享的原则,希望对大家有所帮助. 本篇针对的是微信小程序的支付开发,如果有对微信公 ...

  6. 剑指offer第二版-3.数组中重复的数

    面试题3:数组中重复的数 题目要求: 在一个长度为n的数组中,所有数字的取值范围都在[0,n-1],但不知道有几个数字重复或重复几次,找出其中任意一个重复的数字. 解法比较: /** * Copyri ...

  7. k8s学习 - 概念 - Deployment

    k8s学习 - 概念 - Deployment 有了 ReplicaSet 还需要有 Deployment 的原因是希望有一个控制器能管理部署更新时候的版本控制问题.一个 Deployment 可以管 ...

  8. Web前端三大框架_vue源码笔记

    一.VUE 1.1 MVVM VUE也是基于MVVM模式实现的.特点就是数据双向绑定 在MVVM模式中,分成三个部分: M 模型 model V 视图 view VM 视图-模型 view-model ...

  9. visual studio 容器工具首次加载太慢 vsdbg\vs2017u5 exists, deleting 的解决方案

    ========== 正在准备容器 ========== 正在准备 Docker 容器... C:\Windows\System32\WindowsPowerShell\v1.\powershell. ...

  10. Devops-运维效率之数据迁移自动化

    overmind系统上线三个月,累计执行任务800+,自动审核执行SQL超过5000条,效率提升相当明显,离"一杯咖啡,轻松运维"的目标又进了一步. 写在前边 overmind系统 ...