Python基础进阶:函数与lambda表达式

学习目标:

掌握Python进阶知识

学习内容:

1、 函数

2、 lambda表达式

学习产出:

1.1.函数的概念
  • 函数以def关键词开头,后接函数名和圆括号()。
  • 函数执行的代码以冒号起始,并且缩进。
  • return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回None。
    语法结构:
    def functionname (parameters):
    “函数_文档字符串”
    function_suite
    return [expression]
1.2.函数的调用
def printme(str):
    print(str)


printme("我要调用用户自定义函数!")  # 我要调用用户自定义函数!
printme("再次调用同一函数")  # 再次调用同一函数
temp = printme('hello') # hello
print(temp)  # None
1.3.函数文档
#name是形参,如果调用有形参的方法,必须给方法形参才可以使用该方法
def show(name):
    "test def"
    print(name)
#__doc__ --> 获得文档字符串
print(show.__doc__)#test def
print(show('lisa'))#lisa
1.4.函数参数

python的参数是多样化的,大致可以分为如下几种:

  • 位置参数 (positional argument)
    def functionname(arg1):
    “函数_文档字符串”
    function_suite
    return [expression]
    arg1 - 位置参数 ,这些参数在调用函数 (call function) 时位置要固定。
  • 默认参数 (default argument)
    def functionname(arg1, arg2=v):
    “函数_文档字符串”
    function_suite
    return [expression]
    arg2 = v - 默认参数 = 默认值,调用函数时,默认参数的值如果没有传入,则被认为是默认值。 默认参数一定要放在位置参数后面,不然程序会报错
  • 可变参数 (variable argument) 可变参数就是传入的参数个数是可变的
    def functionname(arg1, arg2=v, *args):
    “函数_文档字符串”
    function_suite
    return [expression]
    *args - 可变参数,可以是从零个到任意个,自动组装成元组。 加了星号(*)的变量名会存放所有未命名的变量参数。
  • 关键字参数 (keyword argument),可以是从零个到任意个,自动组装成字典。
  • 命名关键字参数 (name keyword argument),
    *, nkw - 命名关键字参数,用户想要输入的关键字参数,定义方式是在nkw 前面加个分隔符 *。
  • 参数组合
    可以用位置参数、默认参数、可变参数、命名关键字参数和关键字参数,这 5 种参数中的 4 个都可以一起使用,但是顺序必须是位置参数、默认参数、可变参数和关键字参数(位置参数、默认参数、命名关键字参数和关键字参数。)
#位置参数/默认参数
def printinfo(name, age=8):
    print('Name:{0},Age:{1}'.format(name, age))
printinfo('小马')  # Name:小马,Age:8
printinfo('小马', 10)  # Name:小马,Age:10

#可变参数
def printinfo(arg1, *args):
    print(arg1)
    for var in args:
        print(var)
printinfo(10)  # 10
printinfo(70, 60, 50)

#关键字参数
def printinfo(arg1, *args, **kwargs):
    print(arg1)
    print(args)
    print(kwargs)

「可变参数」和「关键字参数」的同异总结如下:
可变参数允许传入零个到任意个参数,它们在函数调用时自动组装为一个元组 (tuple)。
关键字参数允许传入零个到任意个参数,它们在函数内部自动组装为一个字典 (dict)。

1.5.函数的返回值

关键字:return

def add(a, b):
    return a + b
print(add(1, 2))  # 3
print(add([1, 2, 3], [4, 5, 6]))  # [1, 2, 3, 4, 5, 6]
1.6.作用域
  • Python 中,程序的变量并不是在哪个位置都可以访问的,访问权限决定于这个变量是在哪里赋值的。
  • 定义在函数内部的变量拥有局部作用域,该变量称为局部变量。
  • 定义在函数外部的变量拥有全局作用域,该变量称为全局变量。
  • 局部变量只能在其被声明的函数内部访问,而全局变量可以在整个程序范围内访问。
  • 当内部作用域想修改外部作用域的变量时,就要用到global和nonlocal关键字了。
num = 1


def fun1():
    global num  # 需要使用 global 关键字声明
    print(num)  # 1
    num = 123
    print(num)  # 123
    
fun1()
print(num)  # 123
2.1.匿名函数的定义

在 Python 里有两类函数:
第一类:用 def 关键词定义的正规函数
第二类:用 lambda 关键词定义的匿名函数
Python 使用 lambda 关键词来创建匿名函数,而非def关键词,它没有函数名,其语法结构如下:
lambda argument_list: expression
需要注意的是:
lambda 不需要用return来返回,表达式本身结果就是返回值。
匿名函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数。

def sqr(x):
    return x ** 2


print(sqr)
# <function sqr at 0x000000BABD3A4400>

y = [sqr(x) for x in range(10)]
print(y)
# [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

lbd_sqr = lambda x: x ** 2
print(lbd_sqr)
# <function <lambda> at 0x000000BABB6AC1E0>

y = [lbd_sqr(x) for x in range(10)]
print(y)
# [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]


sumary = lambda arg1, arg2: arg1 + arg2
print(sumary(10, 20))  # 30

func = lambda *args: sum(args)
print(func(1, 2, 3, 4, 5))  # 15
2.1.匿名函数的引用

函数式编程 是指代码中每一块都是不可变的,都由纯函数的形式组成。这里的纯函数,是指函数本身相互独立、互不影响,对于相同的输入,总会有相同的输出,没有任何副作用。

def f(x):
    y = []
    for item in x:
        y.append(item + 10)
    return y


x = [1, 2, 3]
f(x)
print(x)
# [1, 2, 3]

匿名函数 常常应用于函数式编程的高阶函数 (high-order function)中,主要有两种形式:
参数是函数 (filter, map)
返回值是函数 (closure)
filter(function, iterable) 过滤序列
filter(function, iterable) 过滤序列

m1 = map(lambda x: x ** 2, [1, 2, 3, 4, 5])
print(list(m1))  
# [1, 4, 9, 16, 25]

m2 = map(lambda x, y: x + y, [1, 3, 5, 7, 9], [2, 4, 6, 8, 10])
print(list(m2))  

数据及代码源于"AI训练营Python-阿里云天池"

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值