一、完成的事项
学习廖雪峰Python教程
二、笔记
A(调用函数)
1.
Python内置了很多有用的函数,我们可以直接调用。
http://docs.python.org/3/library/functions.html#abs
B(定义函数)
1.
在Python中,定义一个函数要使用 def语句,依次写出函数名、括号、括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用return语句返回。
我们以自定义一个求绝对值的my_abs函数为例:
#-- coding: utf-8 --
def my_abs(x):
if x >= 0:
return x
else:
return -x
print(my_abs(-99)) => 99
2.
在Python交互环境中定义函数时,注意Python会出现…的提示。函数定义结束后需要按两次回车重新回到>>>提示符下
3.
如果想定义一个什么事也不做的空函数,可以用pass语句:
def nop():
pass
pass语句什么都不做,那有什么用?实际上pass可以用来作为占位符,比如现在还没想好怎么写函数的代码,就可以先放一个pass,让代码能运行起来。
C(参数检查)
数据类型检查可以用内置函数==isinstance()==实现:
def my_abs(x):
if not isinstance(x, (int, float)):
raise TypeError(‘bad operand type’)
if x >= 0:
return x
else:
return -x
添加了参数检查后,如果传入错误的参数类型,函数就可以抛出一个错误:
>>> my_abs(‘A’)
Traceback (most recent call last):
File “”, line 1, in
File “”, line 3, in my_abs
TypeError: bad operand type
D(返回多个值)
Python的函数返回多值其实就是返回一个tuple
E(默认参数)
1.
def power(x, n=2):
s = 1
while n > 0:
n = n - 1
s = s * x
return s
这样,当我们调用power(5)时,相当于调用power(5, 2):
而对于n > 2的其他情况,就必须明确地传入n,比如power(5, 3)。
2.
Python函数在定义的时候,默认参数L的值就被计算出来了,即[],因为默认参数L也是一个变量,它指向对象[],每次调用该函数,如果改变了L的内容,则下次调用时,默认参数的内容就变了,不再是函数定义时的[]了。
可以将默认参数改为none来解决这个问题
F(可变参数)
1.
在参数前面加了一个*号;
调用该函数时,可以传入任意个参数,包括0个参数
2.
Python允许你在list或tuple前面加一个*号,把list或tuple的元素变成可变参数传进去
G(关键字参数)
>>> extra = {‘city’: ‘Beijing’, ‘job’: ‘Engineer’}
>>> person(‘Jack’, 24, **extra)
name: Jack age: 24 other: {‘city’: ‘Beijing’, ‘job’: ‘Engineer’}
在dict类型的数据前加**可将整个dict内的数据传进参数中
H(命名关键字参数)
如果要限制关键字参数的名字,就可以用命名关键字参数
——只接受某种命名的参数
I(参数组合)
参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数。
J(递归)
尾递归是指,在函数返回的时候,调用自身本身,并且,return语句不能包含表达式。这样,编译器或者解释器就可以把尾递归做优化,使递归本身无论调用多少次,都只占用一个栈帧,不会出现栈溢出的情况。
三、练习
调用函数
函数的参数
递归函数
四、问题
1.
编程时无法调用 math 中的函数