一、函数
1.定义函数
- 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 ()
- 任何传入参数和自变量必须放在圆括号中间
- 函数内容以冒号起始,并且缩进
- return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None
def myprint(istr):
print(istr[::-1])
myprint('hello')
#olleh
- 返回多个值
pyhton支持函数返回多个值,但其实这只是一种假象,Python函数返回的仍然是单一值(有括号括起来)
def changeXY(x,y):
x=x*2
y=y//2
return x,y
x,y=6,66
print(changeXY(x,y))
#(12,33)
- 空函数
如果想定义一个什么事也不做的空函数,比如现在还没想好怎么写函数的代码,就可以先放一个pass,用来作为占位符,让代码能运行起来。
def myprint():
pass
2.调用函数
python 中一切都是对象,严格意义我们不能说值传递还是引用传递,我们应该说传不可变对象和传可变对象。
- 不可变类型:类似 c++ 的值传递,如 数、字符串、元组。
如下方例子中的 fun(iint) ,传递的只是 iint 的值,没有影响 iint 对象本身。在 fun(iint)内部修改 a 的值,只是修改另一个复制的对象,不会影响 iint 本身。 - 可变类型:类似 c++ 的引用传递,如 列表,字典
如下方例子中的 fun(ilist),则是将 ilist 真正的传过去,修改后fun外部的 ilist 也会受影响
def ChangeTry(iint,ilist):
iint,ilist[0] = 10,10 #当然
myint,mylist = 2,[2,2,2]
ChangeTry(myint,mylist)
print(myint,mylist)
#2 [10, 2, 2]
- 默认参数
调用函数时,如果没有传递参数,则会使用默认参数。
def changeXY(x,y=8):
x=x*2
y=y//2
return x,y
x,y=6,66
print(changeXY(x))
#(12, 4)
- 可变参数
在Python函数中,还可以定义可变参数。顾名思义,可变参数就是传入的参数个数是可变的,可以是1个、2个到任意个,还可以是0个。
加了星号 * 的参数会以元组(tuple)的形式导入
def calc(*numbers):
sum=0
for n in numbers:
sum+=n*n
return sum
print(calc(1,2,3),calc(1,2,3,4,5))
#14 55
- 关键字参数
关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict
加了两个星号 ** 的参数会以字典的形式导入
def person(name, age, **kw):
print('name:', name, 'age:', age, 'other:', kw)
person('Mike',25,gender='M', job='Engineer')
#name: Mike age: 25 other: {'gender': 'M', 'job': 'Engineer'}
3.练习
请定义一个函数quadratic(a, b, c),接收3个参数,返回一元二次方程 ax2+bx+c=0的两个解。
提示:
一元二次方程的求根公式为:
x
=
−
b
±
b
2
−
4
a
c
2
a
x=\frac{-b\pm\sqrt{b^2-4ac}}{2a}
x=2a−b±b2−4ac
计算平方根可以调用math.sqrt()函数
from math import sqrt #导入开平方的函数
def quadratic(a, b, c):
d=sqrt(b*b-4*a*c)
x1=(-b+d)/2/a
x2=(-b-d)/2/a
return(x1,x2)
print('quadratic(2, 3, 1) =', quadratic(2, 3, 1))
#quadratic(2, 3, 1) = (-0.5, -1.0)
二、Lambda表达式(匿名函数)
python 使用 lambda 来创建匿名函数。
- 所谓匿名,意即不再使用 def 语句这样标准的形式定义一个函数。
- lambda 只是一个表达式,而不是一个代码块,函数体比 def 简单很多。
- 关键字lambda表示匿名函数,冒号前面的x表示函数参数
score=[['Mike',92],['Mary',95],['Jack',98],['Kate',90]]
'''1.普通排序(按第一个元素)'''
score.sort()
print(score)
#[['Jack', 98], ['Kate', 90], ['Mary', 95], ['Mike', 92]]
'''2.定义函数,使之按第二个元素进行排序(且从高到低输出)'''
def need1(a):
return a[1]
score=[['Mike',92],['Mary',95],['Jack',98],['Kate',90]]
score.sort(key=need1,reverse=True)
print(score)
#[['Jack', 98], ['Mary', 95], ['Mike', 92], ['Kate', 90]]
'''3.用lambda定义匿名函数,节省代码空间'''
score.sort(key=lambda a:a[1],reverse=True)
print(score)
#[['Jack', 98], ['Mary', 95], ['Mike', 92], ['Kate', 90]]
附:python基础系列
Day1:变量、运算符与数据类型
Day2:条件与循环
Day3&4:列表与元组
Day5:字符串与序列
Day6&7:函数与Lambda表达式——>本文
Day8:字典与集合
Day9&10:文件与文件系统
Day11:异常处理
Day12:else 与 with 语句
Day13&14:类与对象
Day15&16:魔法方法
Day17:模块