函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内建函数,比如print()。但你也可以自己创建函数,这被叫做用户自定义函数。要调用一个函数,需要知道函数的名称和参数。函数名其实就是指向一个函数对象的引用,完全可以把函数名赋给一个变量,相当于给这个函数起了一个“别名”。
因为变量没有类型,所以python中函数是不支持函数重载的(这点与java不同)。
一、自定义一个函数:
1、定义一个函数要使用def关键字开头,依次写出函数名、括号、括号中的参数和冒号:,然后,在缩进块(一般建议使用四个空格进行缩进)中编写函数体,函数的返回值用return语句返回。如果没有return语句,函数执行完毕后也会默认return(即return None)。
2、函数体的第一行语句可以是可选的字符串文本(建议必填),即这个函数的注释说明。
3、返回可以return多个值,那么这个返回值其实是“元组”类型。
4、函数参数:有四类(必选参数、默认参数、可变参数和关键字参数);参数定义的顺序必须是:必选参数、默认参数、可变参数和关键字参数:
4.1、函数默认参数:(必选参数在前,默认参数必须在后;默认参数必须指向不可变对象,因为函数在定义的时候,默认参数对象地址就被分配了,默认参数只要不重新赋值,则指向的地址永远不变,一旦赋值改变,则会发生错误;)
例:
def power(x, n=2):
s = 1
while n > 0:
n = n - 1
s = s * x
return s
def add_end(L=None):
if L is None:
L = []
L.append('END')
return L
4.2、函数可变参数:(可变参数就是传入的参数个数是可变的,可以是1个、2个到任意个,还可以是0个。)
例:
def calc(*numbers):
sum = 0
for n in numbers:
sum = sum + n * n
return sum
4.3、函数关键字参数:(关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个Dictionary。)
例:
def person(name, age, **kw):
print 'name:', name, 'age:', age, 'other:', kw
5、在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。
二、函数调用:
例:
>>> int('123')
123
>>> int(12.34)
12
>>> float('12.34')
12.34
>>> str(1.23)
'1.23'
>>> unicode(100)
u'100'
>>> bool(1)
True
>>> bool('')
False
三、常用的内置函数:
1. abs(val) 获取val绝对值。
>>>
abs
(
-
10
)
10
2. all(val) val对象的迭代器中所有元素为真(不为0、不为''、不为False),则返回True(val对象中没有元素也是返回true),否则返回False。(类似于 与逻辑)
>>> tmp_1
=
[
'python'
,
123
]
>>>
all
(tmp_1)
True
3、any(val) val对象的迭代器里有一个元素为真(不为0、不为''、不为False),那么就返回True,否则返回False。(类似于 或逻辑)
4、ascii(val) 调用对象的__repr__()方法,返回一个表示对象的字符串, 但是对于字符串中的非 ASCII 字符则返回通过 repr() 函数使用 \x, \u 或 \U 编码的字符。
5、bin(val)、oct(val),、hex(val) 三个函数功能分别为:将十进制数分别转换为2/8/16进制。
6、bool(val) 测试一个对象是True还是False.(当对数字使用bool函数时,0返回假(False),任何其他值都返回真。当对字符串使用bool函数时,对于没有值的字符串(也就是None或者空字符串)返回False,否则返回True。bool函数对于空的列表,字典和元祖返回False,否则返回True。)
7、bytes(val, encoding
=
'utf-8'
) 将一个字符串转换成字节类型
8、str(val, encoding
=
'utf-8'
) 将字节类型/数值类型等转换为字符串类型
9、chr(val) 用一个范围在 range(256)内的(就是0~255)整数作参数,返回一个对应的字符。(val可以是10进制也可以是16进制的形式的数字。)
unichr(val)和chr(val)函数功能基本一样, 只不过是返回unicode的字符
10、@classmethod 类中方法修饰符,指定一个方法为类的方法,由类直接调用执行,只有一个cls参数,调用该的方法时,自动将调用该方法的类赋值给cls,不需要自己传参.
11、compile
(source, filename, mode, flags
=
0
, dont_inherit
=
False
, optimize
=
-
1
)
将source编译为代码或者AST对象。得到的对象能过通过
exec
语句来执行或者
eval
()进行求值。
参数source -- 字符串或者AST(Abstract Syntax Trees)对象。
参数filename:代码文件名称,如果不是从文件读取代码则传递一些可辨认的值。
参数model:指定编译代码的种类。可以指定
'exec'
,
'eval'
,
'single'
。
参数flag和dont_inherit:这两个参数为可选参数。
12、 complex(realVal,imagVal) 创建一个值为realVal
+
imagVal
*
j的复数。
如果第一个参数是字符串,则不需要指定第二个参数。
参数realVal:
int
,
long
,
float
或字符串。
参数imagVal:
int
,
long
,
float
。
13、delattr(object, name) 相等于 del object.name,用于删除object对象的name属性。
14、dict() / dict(val) 创建数据字典
>>> a
=
dict
() 空字典
>>> a
{}
>>> b
=
dict
(one
=
1
, two
=
2
)
>>> b
{
'one'
:
1
,
'two'
:
2
}
>>> c
=
dict
({
'one'
:
1
,
'two'
:
2
})
>>> c
{
'one'
:
1
,
'two'
:
2
}
15、dir() / dir(val) 不带参数时返回当前范围内的变量,方法和定义的类型列表,带参数时返回参数的属性,方法列表。
16、divmod(val1,val2) 分别获取val1除以val2的商和余数
>>>
divmod
(
20
,
6
)
(
3
,
2
)
17、eval(val) 将字符串val当成有效的算数表达式来求值并返回计算结果
18、exec(val) 执行字符串val
19、float(val) 将一个字符串或整数转换为浮点数
20、frozenset
([iterable]) 创建一个不可修改的set集合。(参数iterable:可迭代对象)
21、getattr
(
object
, name [, defalut])
获取对象
object
名为name的特性,如果
object
不包含名为name的特性,
且提供default参数,将返回default。
22、 id(val) 返回对象的内存地址
23、input() 获取用户输入内容
num
=
input
(
"请输入:\n"
)
# 用户输入3
print
(num)
# 输出结果
3
obj,
cls
)
) 检查obj对象是否是cls类的对象,返回True或False
25、issubclass(subCls,superCls) 检查一个类是否是另一个类的子类。返回True或False
26、int
([val[,radix]]) 将一个字符串或数值转换为一个普通整数
参数val是一个字符串类型时,可以使用参数radix,radix表示val的进制数(默认是
10
进制)
27、len(val) 返回对象长度
28、list
([iterable])
列表构造函数,参数iterable是可选的。
29、object() 获取一个新的,无特性对象。
Object
是所有类的基类。它提供的方法在所有的类型实例中共享。
30、open
(filename [, mode [, bufsize]])
打开一个文件,返回一个
file
对象。(
应该使用
open
()来代替直接使用
file
类型的构造函数打开文件
)
参数filename表示将要被打开的文件的路径字符串;
参数mode表示打开的模式,最常用的模式有:
'r'
表示读文本,
'w'
表示写文本文件,
'a'
表示在文件中追加。
Mode的默认值是
'r'
。
当操作的是二进制文件时,只要在模式值上添加
'b'
。这样提高了程序的可移植性。
可选参数bufsize定义了文件缓冲区的大小。
0
表示不缓冲;
1
表示
行缓冲
;任何其他正数表示使用该大小的缓冲区;
如果参数值被省却或者为负数则表示使用系统默认缓冲区大小,对于tty设备它往往是行缓冲,而对于其他设备往往完全缓冲。
31、pow(val1,val2) 幂函数
r
=
pow
(
2
,
10
)
# 2的10次方
print
(r)
# 输出
1024
32、print(val) 输出函数
如何取消
print
的默认换行:
print(value, ...,sep
=
'
',end='
\n',
file
=
sys.stdout,flush
=
False
),将end设为''
33、range(start, stop[, step]) 创建一个整数列表
start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5);
stop: 计数到 stop 结束,但不包括 stop。例如:range(0, 5) 是[0, 1, 2, 3, 4]没有5
step:步长,默认为1。例如:range(0, 5) 等价于 range(0, 5, 1)
34、round
(x [, n]) 四舍五入
对参数x的第n
+
1
位小数进行四舍五入,返回一个小数位数为n的浮点数。
35、setattr() 与getattr()相对应,setattr(object,name,value) 参数是一个对象,一个对象属性名称和一个任意值。字符串可以命名现有属性或新属性。如果对象允许,该函数将赋值给该属性。
36、super() 返回父类对象