目录
1.函数
2.函数的定义规则
3.无参参数
4.有参参数
5.函数返回值
6.Pass&文档字符串
7.函数
8.lambda函数
9.常用函数
10.
一、函数
1、函数:重用的程序段,允许给一块语句一个名称
2、调用函数:在程序的任何地方使用这个名称,任意多次运行这个语句块
3、内建函数:例如len和range
4、通过改变函数的参数,可以最大程度的复用代码
二、函数的定义规则
1、 def: 函数代码块以def关键字开头,后接函数表示符名和圆括号( );
2、形参&实参:任何传入实参和形参必须放在圆括号中,圆括号中写的是形参;
3、首行:函数的第一行语句可以选择性地使用文档字符串--用于存放函数说明;
4、函数内容以冒号起始,并且函数体要有缩进;
5、return[expression]结束函数,选择性返回一个值给调用者.不带表达式的return相当于返回None;
三、无参参数:无传入函数
def sayHello( ):
print 'Hello World!'
sayHello( )
四、有参函数
Python中的调用函数,使用的形参分如下几类:
必备参数、命名参数、缺省参数、不定长参数
1.必备参数
(1)传递指定个数的必备参数
f:def info(name,age,tel):
print "name:"+name+",age:"+str(age)+",tel:"+tel
info('jack',20,'13567867878')
(2)传不可变对象
一切皆对象,这里说的不可变对象指那些不可改变的数据类型,比如字符串、数字等.
(3)传可变对象
Python传参相当于传值和传引用的一种综合.
如果函数收到的是一个可变对象(比如字典或者列表)的参数,这个时候就是通过传"引用"来传递的参数。(其实,这种归根结底传的也是值,只不过是指向内存空间地址的值)
如果函数收到的是一个不可变对象(比如数字、字符或者元组)的参数,这个时候就是通过"传值"来传递度对象,如果想改变原变量的值。可以将这些变量申明为全局变量。
默认参数,必须指向不变对象。
默认参数,函数应该检查参数类型
2.命名参数
传参时命名参数必须在非命名参数的后面,否则就会报SyntaxError:non-keyword arg after keyword arg的错误。
3.缺省参数
注意默认值必须要放到没有默认值参数的最后面,否则会报错。这因为赋给形参的值是根据位置而赋值的。
某个函数有许多参数,其中也有多个默认参数值,而你只想指定其中的一部分,那么可通过命名来为这些参数赋值,此方式被称为关键参数赋值,使用名字进行赋值,而不是位置进行赋值。
4.不定长参数
五.函数返回值
1.函数返回值
函数完成计算后,可以返回一个值或一个对象,函数执行完毕也没有return语句时,自动 return None.
2.函数返回多个值
Def func(a,b):
Return a,b
Print func(10,20)
六.Pass&文档字符串
1.Pass
在函数或者类中,使用Pass语句,表示一个空的语句块,仅作为占位,执行后并没有任何效果,可以用于定义待开发的函数和类。
Def someFunction( ):
pass
2.文档字符串
DocStrings是一个重要的工具,由于它帮助你的程序文档更加简单易懂,你应该尽量使用它。
七.函数
1.raw_input和input函数的区别
Input( )支持用户输入数字或者表达式,不支持输入字符串.返回的是数字类型的数值。而raw_input( )捕获的是最原始的输入,也就是返回的是一个字符串。
2.使用元组作为函数的参数
3.使用字典作为函数的参数
4.同时使用*和**的函数参数
八、lambda函数 匿名函数
(1)lambda语句被用来创建新的函数对象,并且在运行时返回它们。
(2)Python使用lambda关键字来创建匿名函数。这种函数得名于省略了用def声明函数的标准步骤
(3)lambda只是一个表达式,函数体比def简单的多。
(4)lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。
(5)lambda函数拥有自己的名字空间,且不能访问自由参数列表之外全局名字空间里的参数。
(6)虽然lambda函数看起来只能写一行,却不等于C或C++的内联函数,后者额目的是调用函数时不占用栈内存从而增加运行效率
(7)像if或for或print等语句不能用于lambda中
(8)lambda函数不能共享给别的程序调用,def定义的函数可以
Demo
g=lambda x:x+1 def g(x):
Return x+1
Print g(1)
Print g(2)
九、常用函数
1.repr函数
repr函数用来取得对象的规范字符串表示。反引号(也成转换符)可以
按值传递,不可变元素
2.type函数 求证变量类型
3.map函数
将每个列表或者字符串都执行某个函数
Map无法处理seq长度不一致,对应位置操作数类型不一致的情况,这两种情况都会报类型错误。
4.fiter函数
Fiter( )函数可以对序列做过滤处理,就是说可以使用一个自动的函数过滤一个序列,把序列的每一项传到自定义的过滤函数里处理,并返回结果做过滤。最终一次性返回过滤后的结果。
5.reduce函数
6.递归打印Fibonacci函数
7.Exec( )和eval( )的区别?
Exec( ) 有时可能会需要动态地创造Python代码,然后将其作为语句或作为表达式去执行。
exec语句用来执行存储在字符串或者文本中有效的Python语句。
Eval( )用来计算存储在字符串中的有效Python表达式,并返回计算结果。
Exec( )和eval( )都可以动态的执行存储在字符串或文本中的有效的Python语句没有返回值,而eval有返回值
7.range和xrange的区别?
range会直接生成一个list对象
xrange则不会直接生成一个list,而是每次调用返回其中的一个值[xrange返回的是一个生成器]
十.重载&函数引用
1.Python函数为何没有重载?
(1)可变参数类型
(2)可变参数个数
当两个函数除了参数类型和参数个数不同之外,其功能是完全相同的,此时才使用函数重载。如果两个函数的功能其实不同,那么不应当使用重载,而应当使用一个名字不同的函数。
情况一:函数功能相同,但是参数类型不同,Python如何处理?
Python接受任何类型的函数,如果函数的功能相同,那么不同的参数类型在python中很可能是相同的代码,没有必要做成两个不同的函数。所以,根本不需要处理。
情况二:函数功能相同,但是参数个数不同,Python如何处理?
缺省函数,对于缺少的参数设为缺省函数即可解决问题。
完成相同的功能。注意,在大多数时候有eval(repr(object))==object
2.函数的引用?
Demo1:引用函数
a =abs
Print a(-1)
Demo2:函数参数可以是函数
Def func(f):
Print f(-1)
Func(abs)
网友评论