Python_009(函数,命名空间)
一.函数
1.函数格式:
#定义函数: def function(): 函数体 return 返回值 #调用函数: function() ret = function() 这是得到返回值.
这里是用关键字def定义函数,函数命名规则基本和变量一样;
返回值问题:执行完函数之后,我们可以用return来返回结果,
a:函数中若遇到return时,此函数结束,不在继续执行;
b:return返回值可以有多个,但有几个需要注意的地方:
def sum():
return "小","大","中"
re = sum()
print(re)
a,b,c = sum()
print(a,b,c)
#输出结果:
('小', '大', '中')
小 大 中
*从上述代码可以看出,return可以返回多个值,返回类型是元组,(元素,元素,元素)
可以利用结构的办法拿出单个元素:
c:如果return什么都不写,或者不写return,那么返回的就是None;
2.函数的参数
形参:写在函数声明的位置的变量叫形参,例:def function(count)里面的count就是形参;
实参:在函数调用的时候给函数传递实际的参数值,例:function(9)里面的9就是实际传给count的值;
传参:就是把实参的信息或数据传递给形参的一个过程;
def yue(chat): # chat 形参
print("拿出⼿手机")
print("打开"+chat)
print("找个漂亮的妹⼦子")
print("约不不约") yue("陌陌") # 实参 len("字符串串")
# "字符串串"在这⾥里里就是实参 print("麻花藤") # "麻花藤"就是实参
3.参数的分类
a.位置参数
如果有多个形参和实参进行传递的话:
a:实参的位置参数必须和形参一一对应,在实参中的混合参数这一块,位置参数必须放在关键字参数前面;
def function(count, sum,name = "野",):#形参:函数定义时,给函数定义的变量值
while count < 10:
print("刘博文是条单身{xi}狗,{he}!".format(xi = name,he = sum))
count += 1
function(9, 666, name="马化腾")
function(9, 555, "没毛") #这里的9和666是位置参数,系统默认把实参赋值给形参,必须一一对应
#这里的name是关键字参数,若是单独使用,不用考虑位置问题,
如果实参没有传递给形参的值,形参就会显示默认值,这里"野"字就是默认值
***注意,形参中必须要先声明位置参数,才能声明默认值参数!
二.动态传参
1.问题引入:位置参数是按照位置进行传参;如果想吃任意的食物,数量是任意的,食物也是任意的,
两个都是不定量,所以就引入动态参数了.
2.动态接收位置参数
格式:def func(*food)#这里的*就是聚合多个位置参数的符号
print("我要吃",food)
func(任意量的值)所以调用函数的时候,得到的结果就是任意量的值;
def func(name,age,*food,sex="男"):
print(name,age,sex,food)
func("周",12,2,3,1,4)
#结果:周 12 男 (2, 3, 1, 4)
这里的结果是以元组的形式显示的;
注意:*args只是聚合多个位置参数,如果实参中只有一个对象(任意数据类型),直接按位置参数传入就可以;
而*args是接收多个对象,例如接收多个列表或元组或一个列表和一个元组;
b:还有一点,关于**kwargs的,代码如下
def func(*args, **kwargs):
args = (1,2,3)
print(*args) # print(*(1,2,3))
print(**kwargs) # print(**{'name':'alex', 'age':1000})
func(1, 2, 3, name='alex', age=1000)
#输出结果
1 2 3
Traceback (most recent call last):
File "D:/Python/course/16.面向对象/课堂笔记/day16/02 函数总结 代码.py", line 7, in <module>
func(1, 2, 3, name='alex', age=1000)
File "D:/Python/course/16.面向对象/课堂笔记/day16/02 函数总结 代码.py", line 3, in func
print(**kwargs) # print(**{'name':'alex', 'age':1000})
TypeError: 'name' is an invalid keyword argument for this function
#这里第3行的print(*args)被正常执行了,但是第四行报错了,说明这里面**kwargs是不能直接在函数中打散的;
2.动态接收关键字参数
在Python中我们**来接收动态关键字参数;
def func(**kwargs):
print(kwargs)
func(a=1, b=2, c=3)
func(a=1, b=2)
结果: {'a': 1, 'b': 2, 'c': 3} {'a': 1, 'b': 2}
#这里输出是以字典的格式输出的,fun(a=1)a代表key值,1代表value值;
4.参数位置总结:
位置参数 >> *args >> 默认值参数 >> *kwargs这四种参数可任意的组合使用;
5.如何把字典和列表传入参数
注意:1.字典和列表都可以单独直接传入参数,只是*args可以接收多个列表,也就是位置参数,参数可以是任意数据类型,
都会作为整体传进去;
2.若是两个列表想要合成一体进行操作,可以在实参位置打散再在形参位置聚合元素;
lst = ["a","b","c","d"]
def func(*enter): #聚合,把所以位置的参数,聚合成元组
print(enter)
func(*lst) #*表示打散元素
#输出结果:('a', 'b', 'c', 'd')
#在实参的位置加一个*号,表示把元素迭代添加到函数中;字符串可以被打散;
b:如果是字典的话也可以被打散:
def func(**enter): #聚合,把关键字的参数,聚合成字典
print(enter)
dic = {"a":1,"b":2,"c":3,"d":4}
func(**dic) #**表示打散字典
#输出结果:{'a': 1, 'b': 2, 'c': 3, 'd': 4}
6.函数注释
def func(**enter): #聚合,把关键字的参数,聚合成字典
'''
这个函数就是接收一个字典的参数
:param enter: 把关键字的参数聚合成字典
:return: 返回一个真
data:2018-7-13
author:ff
'''
print(enter)
return True
这里的''' ''' 中的就是函数体里的注释;
*******Python中不是所有的函数都有返回值,退出函数中就什么都不返回!
三.命名空间
1. 全局命名空间-> 我们直接在py文件中, 函数外声明的变量都属于全局命名空间
2. 局部命名空间-> 在函数中声明的变量会放在局部命名空间
3. 内置命名空间-> 存放python解释器提供的关键字, list, tuple, str, int这些都是内置命名空间
加载顺序:1.内置-->全局-->局部 取值顺序:2.局部-->全局-->内置
四.作用域
作⽤用域:作⽤用域就是作⽤用范围, 按照⽣生效范围来看分为 全局作⽤用域和局部作⽤用域
全局作⽤用域: 包含内置命名空间和全局命名空间. 在整个⽂文件的任何位置都可以使⽤用(遵循 从上到下逐⾏行行执⾏行行). 局部作⽤用域: 在函数内部可以使⽤用.
作⽤用域命名空间:
1. 全局作⽤用域: 全局命名空间 + 内置命名空间
2. 局部作⽤用域: 局部命名空间
我们可以通过globals()函数来查看全局作⽤用域中的内容,也可以通过locals()来查看局部作 ⽤用域中的变量量和函数信息
a = 10
def func():
a = 40
b = 20
def abc():
print("哈哈")
print(a,b)
print(globals()) #打印全局作用域的内容
print(locals()) #打印局部作用域的内容
func()
#结果:{'a': 10,} a = 10是全局作用域
{ 'b': 20, 'a': 40} 而a=40,b=20在函数内部可以使用
五.两个关键字global和nonlacal
1.global
a = 10 #全局变量
def func():
b = 20 #局部变量
a = 10
print(a) #这里面采用就近原则,如果内部找不到变量a,就会再向外扩展,找到a=10
print(b)
def func1():
print(b) #局部变量
func()
func1()
#输出结果:20
第二个函数调用时报错,找不到b 所以,全局变量包含着局部变量,而局部变量不能互相穿插;
global的使用:
a = 10
def func():
global a
a = 20
print(a)
func()
print(a)
#输出结果:
20
20
这里用一个比喻:就是外面(全局变量)有个叫a的,他等于10,我用global把他拽过来,打死,那这个a
就死了,因为他和局部变量已经是同一个a了.
2.nonlocal
a:大致和global一样,但是他调用的是最近一层的变量,不能调用全局变量;只能在函数体中;
Python_009(函数,命名空间)的更多相关文章
- day 10 函数命名空间、函数嵌套和作用域
1. day 09 内容复习 # 函数 # 可读性强 复用性强 # def 函数名(): # 函数体 #return 返回值 # 所有的函数 只定义不调用就一定不执行 #先定义后调用 #函数名() # ...
- day10(闭包、import模块、函数命名空间)
#闭包:嵌套函数,内部函数调用外部函数的变量 # def outer(): # a = 1 # def inner(): # print(a) # inner() # outer() def oute ...
- Python之函数--命名空间、作用域、global、nonlocal、函数的嵌套和作用域链
命名空间 -------‘’存放名字与值的关系”的空间 代码在运行伊始,创建的存储“变量名与值的关系”的空间叫做全局命名空间: 在函数的运行中开辟的临时的空间叫做局部命名空间. 命名空间一共分为三种: ...
- python基础(7)-函数&命名空间&作用域&闭包
函数 动态参数 *args def sum(*args): ''' 任何参数都会被args以元组的方式接收 ''' print(type(args)) # result:<class 'tupl ...
- Python函数——命名空间与闭包
前言 执行以下代码 def my_test(): x = 1 y = x+1 print(x) >> Traceback (most recent call last): File &qu ...
- 《JS权威指南学习总结--8.5 作为命名空间的函数》
内容要点: 函数作用域的概念:在函数中声明的变量在整个函数体内都是可见的(包括在嵌套的函数中),在函数的外部是不可见的.不在任何函数内声明的变量是全局变量,在整个JS程序中都是可见的. 在JS中 ...
- 『无为则无心』Python函数 — 31、命名空间(namespace)
目录 1.什么是命名空间 2.三种命名空间 3.命名空间查找顺序 4.命名空间的生命周期 5.如何获取当前的命名空间 1.什么是命名空间 命名空间指的是变量存储的位置,每一个变量都需要存储到指定的命名 ...
- python命名空间
在"python之禅"那几句话中有一句:namespace is a good thing. python对于命名空间的处理非常简单,下面的内容不一定真实,完全是我根据现象推测出来 ...
- 第八章:Javascript函数
函数是这样一段代码,它只定义一次,但可能被执行或调用任意次.你可能从诸如子例程(subroutine)或者过程(procedure)这些名字里对函数概念有所了解. javascript函数是参数化的: ...
随机推荐
- linux环境常用分析日志的几个命令
前言: 分析日志是定位问题的常用手段,但实际线上可能有大量日志,掌握一些常见查看.过滤和分析日志的命令能起到事半功倍的效果.下面列出工作中最常用的一些命令,可在具体使用是查看,尝试使用.实际使用使往往 ...
- 阶段1 语言基础+高级_1-3-Java语言高级_04-集合_08 Map集合_2_Map常用子类
常用的实现类HashMap 它的子类.LinkedHaspMap
- 接口开发01--mock接口
开发接口的常见场景: 1.mock接口,模拟一些接口,在别的接口没有开发好的时候,你需要测试,可以先模拟一个假接口来测试.比如常见 2.若需要调用第三方接口时,比如支付接口. 3.查看数据,比如开放数 ...
- tail()函数
与head()函数类似,默认是取dataframe中的最后五行. 函数源码: def tail(self, n=): """ Returns last n rows &q ...
- struts2 基础4 验证器、 国际化
验证器: 验证器:用户输入验证 1.手动编程方式 )对于动作类中所有方法进行验证 a.动作类继承ActionSuport b.覆盖调用public void validate(){} 方法 c.在va ...
- SSM框架—Spring+SpringMVC+MyBatis
1.环境搭建 1.1概念 Spring是一个Java应用的开源框架,Bean/Context/Core/IOC/AOP/MVC等是其重要组件,IOC控制反转,AOP面向切面编程,各种注入方式,实现方式 ...
- [常用类]StringBuffer 类,以及 StringBuilder 类
线程安全,可变的字符序列. 字符串缓冲区就像一个String ,但可以修改. 在任何时间点,它包含一些特定的字符序列,但可以通过某些方法调用来更改序列的长度和内容. 字符串缓冲区可以安全地被多个线程使 ...
- pyhton常用快捷键
常用快捷键 快捷键 功能 Ctrl + Q 快速查看文档 Ctrl + F1 显示错误描述或警告信息 Ctrl + / 行注释(可选中多行) Ctrl + Alt + L 代码格式化 Ctrl + A ...
- V-Parenthesis 前缀+ZKW线段树或RMQ
Bobo has a balanced parenthesis sequence P=p 1 p 2…p n of length n and q questions. The i-th questio ...
- docker相关知识
DevOps 是一个完整的面向IT运维的工作流,以 IT 自动化以及持续集成(CI).持续部署(CD)为基础,来优化程式开发.测试.系统运维等所有环节.突出重视软件开发人员和运维人员的沟通合作,通过自 ...