Python基础刻意练习——Day6&7:函数与Lambda表达式

Day1:变量、运算符与数据类型
Day2:条件与循环
Day3&4:列表与元组
Day5:字符串与序列
Day6&7:函数与Lambda表达式——>本文
Day8:字典与集合
Day9&10:文件与文件系统
Day11:异常处理
Day12:else 与 with 语句
Day13&14:类与对象
Day15&16:魔法方法
Day17:模块

一、函数

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(a),传递的只是a的值,没有影响a对象本身。比如在 fun(a)内部修改 a 的值,只是修改另一个复制的对象,不会影响 a 本身。
    可变类型:类似 c++ 的引用传递,如 列表,字典。如 fun(la),则是将 la 真正的传过去,修改后fun外部的la也会受影响
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=2ab±b24ac
计算平方根可以调用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基础刻意练习——Day6&7:函数与Lambda表达式)