return语句用于退出函数,向调用方返回一个表达式。return在不带参数的情况下(或者没有写return语句),默认返回None。None是一个特殊的值,它的数据类型是NoneType。NoneType是Python的特殊类型,它只有一个取值None。
它不支持任何运算也没有任何内建方法,和任何其他的数据类型比较是否相等时永远返回false,也可以将None赋值给任何变量。。。
1》当函数没有显式return,默认返回None值
2》和任何其他的数据类型比较是否相等时永远返回false
3》执行到return语句时,会退出函数,return之后的语句不再执行。但将return语句放在try语句块中,是个例外。
return 'ok'#执行到该return语句时,函数终止,后边的语句不再执行
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。
0
,None
,空字符串
,空列表
,空元组
,空字典`
utf-8 一个汉字三个字节,gbk 一个汉字两个字节
#字节转换成字符串使用str方法
快速获取某个对象提供的功能
列出对象的所有功能及使用方法
计算商与余数,分页使用的方法
判断某个对象是不是某个类的实例
filter内部,会循环第二个参数,以第一个参数代表的函数作为执行体,结果为真,将真的结果返回,filter内部实现了筛选的工作
在内部实现,对每一个元素进行处理,处理方式看你的函数是怎样的要求
map(函数,可迭代对象)
将传入的对象转换为一个哈希值作为一个字典的key来存储,所有语言实现方法相同
函数是否能被调用执行,返回bool值
将一个ascii码值转换为对应的表示,输入的必须为数字
将一个值转换为对应的ascii码值(0b)
single模式,将字符串编译成单行的python代码程序
eval模式,将字符串编译成表达式执行有返回值
exec模式,将字符串编译成跟python一样的程序执行无返回值
函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。
函数能提高应用的模块性,和代码的重复利用率。我们已经知道Python提供了许多内建函数,比如print()
。但我们也可以自己创建函数,这被叫做用户自定义函数。
我们可以定义一个由自己想要功能的函数,以下是简单的规则:
def
关键词开头,后接函数标识符名称
和圆括号()
。
定义参数
。
第一行语句
可以选择性地使用文档字符串—用于存放函数说明
。
冒号
起始,并且缩进。
Return[expression]
结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None
。
默认情况下,参数值和参数名称是按函数声明中定义的的顺序匹配起来的。
以下为一个简单的Python函数,它将一个字符串作为传入参数,再打印到标准显示设备上。
"打印传入的字符串到标准显示设备上"定义一个函数只给了函数一个名称,指定了函数里包含的参数,和代码块结构。
这个函数的基本结构完成以后,你可以通过另一个函数调用执行,也可以直接从Python提示符执行。
Python里不用像C语言里需要先申明函数再使用。
如下实例调用了printme()
函数:
我要调用用户自定义函数!
以下是调用函数时可使用的正式参数类型:
必选参数也称位置参数。必选参数须以正确的顺序传入函数。调用时的数量必须和声明时的一样。
调用printme()
函数,你必须传入一个参数,不然会出现语法错误: "打印任何传入的字符串"
调用函数时,默认参数的值如果没有传入,则被认为是默认值。下例会打印默认的age,如果age没有被传入: "打印任何传入的字符串" # 当不按顺序提供部分默认参数时,需要把参数名写上:
在Python函数中,还可以定义可变参数。顾名思义,可变参数就是传入的参数个数是可变的,可以是1个、2个到任意个,还可以是0个。基本语法如下:
加了星号(*)的变量名会存放所有未命名的变量参数。如下实例:
在函数内部,参数numbers接收到的是一个tuple。调用该函数时,可以传入任意个参数,包括0个参数: 0
如果已经有一个list或者tuple,要调用一个可变参数怎么办?Python允许你在list或tuple前面加一个*
号,把list或tuple的元素变成可变参数传进去:
*nums
表示把nums
这个list的所有元素作为可变参数传进去。
关键字参数允许我们在传入必选参数外,还可以接受关键字参数kw:
这里name, age
是必须的,kw
可选,意味着第三个参数开始我们可以传入任意个数的关键字参数:
这个例子里,关键字参数让我们保证能接收到name
和age
这两个参数,但是,如果提供更多的参数,我们也能收到。
实际上,关键字参数kw
是个dict,如果我们已经准备好了dict,只需要在前面加**
就可以转换为参数传入:
注关键字参数kw
获得的dict是param的一份拷贝,对kw的改动不会影响到函数外的param。
如果要限制关键字参数的名字,就可以用命名关键字参数,例如,只接收city和job作为关键字参数。这种方式定义的函数如下:
和关键字参数**kw
不同,命名关键字参数需要一个特殊分隔符*
,*
后面的参数被视为命名关键字参数
。
命名关键字参数必须传入参数名,这和位置参数不同。如果没有传入参数名,调用将报错。如果调用时缺少参数名city和job,Python解释器把这4个参数均视为位置参数,但person()
函数仅接受2个位置参数。
如果函数定义中已经有了一个可变参数,后面跟着的命名关键字参数就不再需要一个特殊分隔符*
了:
命名关键字参数可以有缺省值,从而简化调用:
由于命名关键字参数city具有默认值,调用时,可不传入city参数。
Python里函数可以返回多个值:
但其实这只是一种假象,Python函数返回的仍然是单一值:
返回值是一个tuple!但是,在语法上,返回一个tuple可以省略括号,而多个变量可以同时接收一个tuple,按位置赋给对应的值,所以,Python的函数返回多值其实就是返回一个tuple,但写起来更方便。
lambda
只是一个表达式,函数体比def
简单很多。
lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。
lambda函数拥有自己的名字空间,且不能访问自有参数列表之外或全局名字空间里的参数。
虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。
lambda函数的语法只包含一个语句,如下:
相加后的值为 : 30
相加后的值为 : 40
return语句用于退出函数,选择性地向调用方
返回一个表达式。不带参数值的return语句返回None。之前的例子都没有示范如何返回数值,下例便告诉你怎么做:
一个程序的所有的变量并不是在哪个位置都可以访问的。访问权限决定于这个变量是在哪里赋值的。
变量的作用域决定了在哪一部分程序你可以访问哪个特定的变量名称。两种最基本的变量作用域如下:
定义在函数内部的变量拥有一个局部作用域,定义在函数外的拥有全局作用域。
局部变量只能在其被声明的函数内部访问,而全局变量可以在整个程序范围内(包括函数里面)访问。如下实例:
#返回2个参数的和."函数内是局部变量 : 30
函数外是全局变量 : 0
但是如果在函数中定义的局部变量如果和全局变量同名,则它会隐藏该全局变量。例如:
如果要给全局变量在一个函数里赋值,必须使用global语句。
global VarName
表达式会告诉Python, VarName是一个全局变量,这样Python就不会在局部命名空间里寻找这个变量了。
例如,我们在全局命名空间里定义一个变量money。我们再在函数内给变量money赋值,然后Python会假定money是一个局部变量。然而,我们并没有在访问前声明一个局部变量money,结果就是会出现一个UnboundLocalError
的错误。取消global语句的注释就能解决这个问题。
在这里我对比c、php、js进行说明:
和其他语言不一样,传递参数的时候,python不允许程序员选择采用传值还是传引用。
Python参数传递采用的肯定是“传对象引用”的方式。实际上,这种方式相当于传值和传引用的一种综合。
如果函数收到的是一个可变对象(比如字典或者列表)的引用,就能修改对象的原始值——相当于通过“传引用”来传递对象。如果函数收到的是一个不可变对象(比如数字、字符或者元组)的引用,就不能直接修改原始对象——相当于通过“传值'来传递对象。
有时候,我们并不想函数修改了原列表,有没有办法呢?有的。既然列表互相赋值是地址引用,引入新的变量名也是不行的,那么,可以复制一个列表出来,这样内存里用的就不是同一个地址,也就不会改变原数组了:
# tmp = mylist; # 这样还是引用同一地址,达不到不修改原列表目的这里使用了切片相关知识,后续会详细讲解。
如果想定义一个什么事也不做的空函数,可以用pass语句: