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

一、函数

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=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基础系列

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值