Python学习笔记3

8函数

在程序中需要反复执行的代码,我们一般把它们封装为一个函数。

8.1定义函数

自定义函数的语法格式如下:

def 函数名(形式参数列表):
    函数体
    return 返回值

示例代码如下:

# -*- coding: utf-8 -*-

def rect_area(width,height):
    area = width * height
    return area
def print_area(width,height):
    area = width * height
    print("{0} * {1} 长方形的面积:{2}".format(width,height,area))

8.2调用函数

        一般有两种调用函数的方式。

8.2.1位置参数调用函数

# -*- coding: utf-8 -*-

def rect_area(width,height):
    area = width * height
    return area
def print_area(width,height):
    area = width * height
    print("{0} * {1} 长方形的面积:{2}".format(width,height,area))
    
area = rect_area(1, 1)
print(area)

8.2.2关键字调用函数8.3

# -*- coding: utf-8 -*-

def rect_area(width,height):
    area = width * height
    return area
def print_area(width,height):
    area = width * height
    print("{0} * {1} 长方形的面积:{2}".format(width,height,area))
    
area = rect_area(width = 1, height = 1)
print(area)

8.3 参数的默认值

         Python中没有函数重载的概念,而是为函数的参数提供了默认值。

def make_coffee(name="卡布奇诺"):
    return "制作一杯{0}咖啡。".format(name)

coffee1 = make_coffee("拿铁")
coffee2 = make_coffee()

print(coffee1) # 制作一杯拿铁咖啡
print(coffee2) # 制作一杯卡布奇诺咖啡

8.4可变参数

        Python中的函数可以定义接受不确定数量的参数,这种参数被称为可变参数。可变参数有两种,即在参数前加*或**。

8.4.1 基于元组的可变参数(*可变参数)

        *可变参数在函数中被组装成一个元组。

        示例代码如下:

# -*- coding: utf-8 -*-

def sum(*numbers):
    total = 0.0
    for number in numbers:
        total += number
    return total

print(sum(100.0,10.0,30.0)) # 输出150.0
print(sum(30.0,80.0)) # 输出110.0

8.4.2 基于字典的可变参数(**可变参数)

        **可变参数在函数中被组装成一个字典。

        示例代码如下:

# -*- coding: utf-8 -*-

def show_info(**info):
    print('-----show_info------')
    for key, value in info.items():
        print('{0} : {1}'.format(key, value))
        
show_info(name='Tony', age=18, sex=True)
show_info(student_name='Tony',student_no='1000')

 8.5函数中变量的作用域

        变量可以在模块中创建,作用域(变量的有效范围)是整个模块,被称为全局变量。变量也可以在函数中创建,在默认情况下作用域是整个函数,被称为局部变量。

# -*- coding: utf-8 -*-

x = 20

def print_value():
    x = 10
    print("函数中x = {0}".format(x))
    
print_value()
print("全局变量x = {0}".format(x))

         我们可以将局部变量提升为全局变量:

# -*- coding: utf-8 -*-

x = 20

def print_value():
    global x
    print("函数中x = {0}".format(x))
    
print_value()
print("全局变量x = {0}".format(x))

8.6函数类型

        Python中的任意一个函数都有数据类型,这种数据类型是function,被称为函数类型。

8.6.1 理解函数类型 

        函数类型的数据与其他类型的数据是一样的,任意类型的数据都可以作为函数返回值使用,还可以作为函数参数使用。因此,一个函数可以作为另一个函数返回值使用,也可以作为另一个函数参数使用。 

# -*- coding: utf-8 -*-

# 定义加法函数
def add(a, b):
    return a + b

# 定义减法函数
def sub(a,b):
    return a - b

# 定义计算函数
def calc(opr):
    if opr == '+':
        return add
    else:
        return sub
    
f1 = calc('+') # f1实际上是add函数
f2 = calc('-') # f2实际上是sub函数
print("10 + 5 = {0}".format(f1(10,5)))
print("10 - 5 = {0}".format(f2(10,5)))

        函数参数列表参数数目不同则不是同类型的函数。

8.6.2 过滤函数filter()

        在Python中定义了一些用于数据处理的函数,如filter()和map()等。我们先介绍filter()函数。

        filter()函数用于对容器中的的元素进行过滤处理。语法如下:

filter(function,iterable)

         参数function是一个提供过滤条件的函数,返回布尔值。参数iterable是容器类型的数据。

         在调用filter()函数时,iterable会被遍历,它的元素会被逐一传入function()函数中。function()函数若返回Ture,则元素被保留;若返回False,则元素被过滤。最后遍历完成,已保留的元素被放到一个新的容器数据中。

        示例代码如下:

# -*- coding: utf-8 -*-

#提供过滤条件函数
def f1(x):
    return x > 50 # 找出大于50的元素

data1 = [66,15,91,28,32,32,132,67,11,32]
filtered = filter(f1, data1)
data2 = list(filtered) # 转换为列表
print(data2)

        注意:filter()函数的返回值并不是一个列表,如果需要返回列表类型的数据,则还需要通过list()函数进行转换。

8.6.3映射函数map()

        map()函数用于对容器中的元素进行映射(或变换)。语法如下:

map(function,iterable)

        参数function是一个提供变换规则的函数,返回变换之后的元素。参数iterable是容器类型的数据。在调用map()函数时,iterable会被遍历,它的元素被逐一传入function()函数中,在function()函数中对元素进行变换。

# -*- coding: utf-8 -*-

# 提供变换规则的函数
def f1(x):
    return x * 2 # 变换规则乘以2

data1 = [21,512,33,53,52,61,56]
mapped = map(f1,data1)
data2 = list(mapped) # 转换为列表
print(data2)

8.7 lambda()函数

        在Python中使用lambda关键字定义匿名函数。lambda关键字定义的函数也被称为lambda()函数,定义lambda()函数的语法如下:

lambda 参数列表:lambda体

        注:lambda体部分不能是一个代码块,不能包含多条语句,只能有一条语句,语句会计算一个结果并返回给lambda()函数,但与有名称的函数不同的是,不需要使用return语句返回。

        lambda()函数与有名称的函数一样,都是函数类型,所以可以修改上面的代码,示例如下:

# -*- coding: utf-8 -*-

# 提供变换规则的函数
def calc(opr):
    if opr == '+':
        return lambda a, b: (a + b) # 替代add()函数
    else:
        return lambda a, b:(a - b) # 替代sub()函数

f1 = calc('+')
f2 = calc('-')
print("10 + 5 = {0}".format(f1(10, 5)))
print("10 - 5 = {0}".format(f2(10, 5)))

8.8使用lambda()函数

# -*- coding: utf-8 -*-

data1 = [66,15,91,28,98,50,7,80,99]

filtered = filter(lambda x: (x > 50),data1)
data2 = list(filtered)
print(data2)

mapped = map (lambda x: (x * 2), data1)
data3 = list(mapped)
print(data3)

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值