好贷网好贷款

Python学习笔记3--函数

发布时间:2016-12-4 3:49:36 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"Python学习笔记3--函数",主要涉及到Python学习笔记3--函数方面的内容,对于Python学习笔记3--函数感兴趣的同学可以参考一下。

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参数:只按照关键字传递并且不会由一个位置参数来填充的参数。

上一篇:Demo-简单使用libcurl静态库访问网址
下一篇:next_permutation 与 prev_permutation的用法 (全排列)

相关文章

相关评论