Python学习第六课-函数和lambda表达式

函数

函数、对象、模块

创建函数

# 新建函数,def为关键字
def MyfirstFunction():
    print("happy")
    print("good job")
# 调用函数
MyfirstFunction()
# happy
# good job

函数的参数

def MysecondFunction(name):
    print(name+"很可爱")
MysecondFunction('小美')
MysecondFunction('小幽')
# 小美很可爱
# 小幽很可爱

两个参数(可以有多个参数,最好2-3个,要做好注释)

def add(num1,num2):
    result=num1+num2
    print(result)
 add(1,2)
 # 3

函数的返回值 - return

def add(num1,num2):
    return (num1+num2)
print (add(5,6))
# 11
  • 实参和形参-见习题1
    形参-parameter
    实参-argument

  • 函数文档-见习题1

  • 关键字参数

def SaySome(name,words):
    print(name+"->"+words)

SaySome(words="让编程改变世界", name = "小甲鱼")
# 小甲鱼->让编程改变世界
  • 默认参数
def SaySome(name='小甲鱼',words="让编程改变世界"):
    print(name+"->"+words)

SaySome()
# 小甲鱼->让编程改变世界
  • 收集参数(可变参数)
def functionname(arg1, arg2=v, *args):
    "函数_文档字符串"
    function_suite
    return [expression]

args - 可变参数,可以是从零个到任意个,自动组装成元组。
加了星号(
)的变量名会存放所有未命名的变量参数。

全局变量和局部变量

  • 全局变量和局部变量
    定义在函数内部的变量拥有局部作用域,该变量称为局部变量。
    定义在函数外部的变量拥有全局作用域,该变量称为全局变量。
  • 函数内部不要试图修改全局变量,python会使用屏蔽(shadowing)方式保护全局变量。
count = 5
def MyFun():
    count = 10
    print(10)
    
MyFun()
print(count)
# 10
# 5
  • 使用global关键字:内部作用域修改外部作用域
count = 5
def MyFun():
    global count
    count = 10
    print(10)

MyFun()
print(count)
# 10
# 10

内嵌函数(内部函数)

  • 内部函数作用域在外部函数之内
def outer():
    print('outer函数在这被调用')
    def inner():
        print('inner函数在这被调用')
    inner()  # 该函数只能在outer函数内部被调用
    
outer()
# outer函数在这被调用
# inner函数在这被调用

闭包

  • 是函数式编程的一个重要的语法结构,是一种特殊的内嵌函数。
  • 如果在一个内部函数里对外层非全局作用域的变量进行引用,那么内部函数就被认为是闭包。
  • 通过闭包可以访问外层非全局作用域的变量,这个作用域称为 闭包作用域。

lambda表达式

函数习题

  1. 怎么给函数编写文档?
    函数文档
def MyFirstFunction(name):
    '函数定义过程中的name叫形参'
    # 因为它只是一个形式,表示占据一个参数位置
    print ("传递进来的"+name+'叫做实参,因为它是具体的参数值')
MyFirstFunction('小甲鱼')
# 传递进来的小甲鱼叫做实参,因为它是具体的参数值
help(MyFirstFunction)
# Help on function MyFirstFunction in module __main__:
# MyFirstFunction(name)
#   函数定义过程中的name叫形参
  1. 怎么给函数参数和返回值注解?

参数注解就是,在定义函数的时候,参数列表内部的参数后面,加上冒号和要传入的类型,例:

def accumlate(x:int, y:int):
    return x*y

返回值注解就是:

def accumlate(x:int, y:int) -> int:
    return x*y
  1. 闭包中,怎么对数字、字符串、元组等不可变元素更新。

  2. 分别根据每一行的首元素和尾元素大小对二维列表 a = [[6, 5], [3, 7], [2, 8]] 排序。(利用lambda表达式)

  3. 利用python解决汉诺塔问题?
    有a、b、c三根柱子,在a柱子上从下往上按照大小顺序摞着64片圆盘,把圆盘从下面开始按大小顺序重新摆放在c柱子上,尝试用函数来模拟解决的过程。(提示:将问题简化为已经成功地将a柱上面的63个盘子移到了b柱)

函数学习资料

https://github.com/datawhalechina/team-learning-program/tree/master/PythonLanguage
https://www.runoob.com/python3/python3-tutorial.html
https://mp.weixin.qq.com/s/gKhXS8JVU8dZBHJF7sIFsw
https://www.bilibili.com/video/av4050443(重点参考资料)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值