Python学习笔记3--函数
来源:互联网 发布:武汉广电网络客服电话 编辑:程序博客网 时间:2024/06/06 02:24
1、函数相关基础
Calls myfunc("spam",'eggs',meat=ham)
def, def adder(a,b=1,*c)
return return a+b+c[0]
global def changer():
global x;x='new'
nonlocal def changer():
nonlocal x;x='new'
yield def squares(x):
for i in range(x):yield i ** 2
lambda Funcs=[lambda x:x**2,lambda x:x*3]
def是可执行的代码,def创建了一个对象并将其复制给某一变量名,lambda创建一个对象但将其作为结果返回,return将一个结果发送给 调用者,yield向调用者发送一个结果对象但是记住它离开的地方,global声明了一个模块级的变量并被复制,nonlocal声明了将要复制的一个封闭的函数变量,函数是通过复制(对象引用)传递的,参数、返回值以及变量并不是声明。
2、作用域
在一个def内定义的变量名只能本def内的代码使用,def中的变量名与def外的变量名不冲突。
函数定义了本地作用域,而模块定义的是全局作用域:
内嵌的模块是全局作用域,全局作用于的作用范围仅限于单个文件,每次对函数的调用都创建了一个新的本地作用域,复制的变量名除非声明为全局变量或非本地变量否则均为本地变量,所有其他的变量名都可以归纳为本地/全局或者内置的。
Python的变量名命名解析机制成LEGB法则:
当函数中使用未认证的变量名是,Python搜索4个作用域【本地L,上一层结构中def或lambda的本地E,全局G,内置作用域B】.当在函数中赋值时,总是创建或改变本地作用域的变量名,除非为全局变量。
nonlocal:声明了将要在一个嵌套的作用域中修改的名称,与global不同的是应用于一个嵌套的一个名称,而不是所有def之外的全局模块作用域。默认情况下不允许修改嵌套的def作用域中的名称,UnboundLocalError,使用nonlocal进行修改。
3、参数
参数的传递是通过自动将对象复制给本地变量名来实现的,在函数内部的参数的赋值不会影响调用者,改变函数的可变对象参数值也许会对调用者有影响(函数能够就地改变传入的可变对象)。
不可变参数“通过值”进行传递,像整数和字符串是哦那个过对象引用而不是拷贝进行传递的,但不可能在原处改变不可变对象;
可变对象是通过“指针”进行传递的,列表和字典这样的对象也是通过对象引用进行传递的,可变对象能够在函数内部进行原处改变。
>>>def changer(a,b)
a=2
b[0]='zz'
>>>x=1
>>>y=[1,2]
>>>changer(x,y)
>>>x,y
(1,['zz',2])
>>>changer(x,y[:]) #如果不想改变传入的对象
匹配语法:
调用者
func(value) #通过位置进行匹配
func(value) #通过变量名匹配
func(*seq) #以name传递所有的对象,并作为独立的基于位置的参数
func(**dict) #以name成对地传递所有的关键字/值,并作为独立的关键字参数
函数
def func(name)
def func(name=value)
def func(*name) #匹配并收集(在元组中)所有包含位置的参数
def func(**name) #匹配并收集(在字典中)所有包含位置的参数
def func(*args,name)#参数必须在调用中按照关键字传递
def func(*,name=value)
>>>def f(*args):print(args)
>>>f()
()
>>>f(1)
(1,)
>>>f(1,2,3)
(1,2,3)
>>>def f(**args):print(args)
>>>f(a=1,b=2)
{'a':1,'b':2}
keywor-only参数:只按照关键字传递并且不会由一个位置参数来填充的参数。
- Python学习笔记3--函数
- python学习笔记3-函数
- python 学习笔记 -- 函数
- Python学习笔记--函数
- Python学习笔记 函数
- Python学习笔记:函数
- python函数学习笔记
- Python学习笔记--函数
- Python学习笔记:函数
- 【Python学习笔记】- 函数
- Python学习笔记----函数
- Python学习笔记:Python函数
- Think Python 学习笔记3:函数
- python学习笔记3--输入输出、eval函数
- Python学习笔记(3) -- enumerate函数
- Python学习笔记(3)用户输入&函数
- Python-函数(学习笔记3)
- python 3 学习笔记:函数-lambda
- [wxWidgets]_[初级]_[正则表达式]
- 线程的简单示例
- C++隐藏自身
- 编程没有银弹:探讨 Java 8 新增特性的优缺点
- 使用window.open的一些学习记录
- Python学习笔记3--函数
- next_permutation 与 prev_permutation的用法 (全排列)
- POJ 3274 Gold Balanced Lineup
- java web从零单排第1期之《运行第一个jsp》
- 伪教练技术培训之殇-2013年9月江西IDC拓行榜与综述
- Python学习笔记4--一个实例(塔防游戏)
- hdu2553解题报告
- C++ MFC学习笔记三
- HTTP协议——代理