【0809 | Day 12】可变长参数/函数的对象/函数的嵌套/名称空间与作用域
可变长参数
一、形参
位置形参
默认形参
二、实参
位置实参
关键字实参
三、可变长参数之*
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
函数的对象
引用
作为函数的参数
作为函数的返回值
作为容器元素
函数的嵌套
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】可变长参数/函数的对象/函数的嵌套/名称空间与作用域的更多相关文章
- Python 函数对象-函数嵌套-名称空间与作用域-闭包函数
今日内容: 1. 函数对象 函数是第一类对象: 指的是函数名指向的值可以被当中数据去使用 1.可以被引用 2.可以当做参数传给另一个函数 3.可以当做一个函数的返回值 4.可以当做容器类型的元素 2. ...
- Noah的学习笔记之Python篇:函数“可变长参数”
Noah的学习笔记之Python篇: 1.装饰器 2.函数“可变长参数” 3.命令行解析 注:本文全原创,作者:Noah Zhang (http://www.cnblogs.com/noahzn/) ...
- CSIC_716_20191109【函数的语法,以及函数的分类,可变长参数*args】
函数 定义.作用.及使用方式 函数是一种工具,可以被重复调用. 使用函数可精简重复代码,减少冗余,增加代码的可读性. 函数要先构造函数,然后调用函数. 构造及调用函数的语法结构 关键字def 函数名 ...
- python全栈开发-Day9 函数对象、函数嵌套、名称空间与作用域
一 .函数对象 一 .函数是第一类对象,即函数可以当作数据传递 可以被引用 可以当作参数传递 返回值可以是函数 可以当作容器类型的元素 二. 利用该特性,优雅的取代多分支的if def foo(): ...
- go实例—函数或方法的可变长参数
支持可变长参数列表的函数可以支持任意个传入参数,比如fmt.Println函数就是一个支持可变长参数列表的函数. 需要注意的是,可变长参数应该是函数定义的最右边的参数,即最后一个参数 package ...
- python基础语法5 函数定义,可变长参数
函数 1.什么是函数 函数就是一种工具. 可以重复调用 2.为什么要用函数 1.防止代码冗(rong)余 2.代码的可读性差 3.怎么用函数 1.定义函数-->制造工具 2.调用函数--> ...
- C++ 系列:函数可变长参数
一.基础部分 1.1 什么是可变长参数 可变长参数:顾名思义,就是函数的参数长度(数量)是可变的.比如 C 语言的 printf 系列的(格式化输入输出等)函数,都是参数可变的.下面是 printf ...
- python学习笔记-函数与可变长参数
一.函数 1. def test(x): y=x+1 return yprint(test) #这是打印函数在内存中的地址 过程:就是没有返回值的函数 在python中过程也是函数,就算没哟返回值,也 ...
- python 函数可变长参数
python中的可变长参数有两种: 一种是非关键字参数(*元组),另一种是关键字参数(**字典) 非关键字可变长参数: """ 非关键字可变参数,一个星号作为元组传入函数 ...
随机推荐
- redis 文件事件模型
参考文献: 深入剖析 redis 事件驱动 Redis 中的事件循环 深入了解epoll (转) Redis自己的事件模型 ae EPOLL(7) Linux IO模式及 select.poll.ep ...
- 通过字节码分析java中的switch语句
在一次做题中遇到了switch的问题,由于对switch执行顺序的不了解,在这里简单的通过字节码的方式理解一下switch执行顺序(题目如下): public class Ag{ static pub ...
- 数字IC前后端设计中的时序收敛(五)--Max Transition违反的修复方法
本文转自:自己的微信公众号<数字集成电路设计及EDA教程> 里面主要讲解数字IC前端.后端.DFT.低功耗设计以及验证等相关知识,并且讲解了其中用到的各种EDA工具的教程. 考虑到微信公众 ...
- c++学习书籍推荐《Visual C++2008入门经典》下载
百度云及其他网盘下载地址:点我 <Visual C++2008入门经典>学习目标: 使用标准模板库(STL)来组织和操作本地C++程序中的数据 C++程序调试技术 构造Microsoft ...
- JavaScript权威指南第六版(阅读笔记)
前言: 对于软件行业学习是无止境的,因为知识更替非常快,能够快速稳固掌握一门新技术是一个程序员应该具备的基本素质. 了解一门语言,了解它的概念非常重要,但是一些优秀的设计思想需要细心和大量实践才能慢慢 ...
- Bzoj 3165 [Heoi2013]Segment题解
3165: [Heoi2013]Segment Time Limit: 40 Sec Memory Limit: 256 MBSubmit: 668 Solved: 276[Submit][Sta ...
- Java编程思想:序列化基础部分
import java.io.*; import java.util.Date; import java.util.Random; public class Test { public static ...
- C语言入门9-2-模块大致一览
字母数字 判断字符是否为英文字母isalpha()判断字符是否为数字isdigit()判断字符是否为英文字母或数字isalnum()判断字符是否为小写字母islower()判断字符是否为大写字母isu ...
- MyBatis 中 @Param 注解的四种使用场景,最后一种经常被人忽略!
有一些小伙伴觉得 MyBatis 只有方法中存在多个参数的时候,才需要添加 @Param 注解,其实这个理解是不准确的.即使 MyBatis 方法只有一个参数,也可能会用到 @Param 注解. 但是 ...
- ArcGIS API For JavaScript 开发(一)环境搭建
标签:B/S结构开发,Asp.Net开发,WebGIS开发 前言:为什么写这个,一是学习:二是分享,共同进步,毕竟也是在这个园子里学到了很多: (一)环境搭建 集成开发环境:VS2013 Ultima ...