我是靠谱客的博主 冷静皮带,最近开发中收集的这篇文章主要介绍《Python零基础快乐学习之旅》学习笔记11——函数设计第11章 函数设计,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

文章目录

  • 第11章 函数设计
    • 11.1 Python函数基本概念
      • 11.1.1 函数的定义
      • 11.1.2 没有输入参数没有返回值的函数
    • 11.2 函数的参数设计
      • 11.2.1 传递一个参数
      • 11.2.2 多个参数传递
      • 11.2.3 参数默认值的处理
    • 11.3 函数返回值
      • 11.3.1 返回None
      • 11.3.2 简单返回数值数据
      • 11.3.3 返回多种数据
      • 11.3.4 简单返回字符串数据
    • 11.4 调用函数时参数为列表
    • 11.5 传递任意数量的参数
      • 11.5.1 传递并处理任意数量的参数
      • 11.5.2 设计含有一般参数与任意数量参数的函数
    • 11.6 局部变量与全局变量
      • 11.6.1 全局变量的使用范围
      • 11.6.2 局部变量与全局变量同名
      • 11.6.3 程序设计的注意事项
    • 11.7 匿名函数lambda

第11章 函数设计

11.1 Python函数基本概念

11.1.1 函数的定义

函数的语法格式如下:

def 函数名称(参数值1[,参数值2,...]):
""" 函数注释(docstring)"""
	程序代码段
	return [返回值1,返回值2, ...]		# 中括号可有可无
  • 函数名称。名称必须是唯一的,程序将来可以呼叫引用。
  • 参数值。参数值可有可无,视函数设计需要而定,可接收呼叫函数传来的变量,各参数之间用逗号“,”隔开。
  • 函数注释。函数注释可有可无,为加强程序可读性,通常会加上注释以说明函数的功能,有多行注释时用3个双引号(或单引号)括起来。
  • return [返回值1,返回值2,…]。不论是return还是右边的返回值都是可有可无的。如果有多个返回数据,需要用逗号“,”隔开。

11.1.2 没有输入参数没有返回值的函数

程序实例:

# 定义一个函数
def greeting():
    """第一个Python函数设计"""
    print("Hello world")

# 主程序
greeting()

执行结果:

Hello world

11.2 函数的参数设计

11.2.1 传递一个参数

程序实例:

# 定义函数
def greeting(name):
    """传递1个参数的函数设计"""
    print("Hello,", name)
greeting('James')

执行结果:

Hello, James

11.2.2 多个参数传递

设计的函数需要传递多个参数时,调用此函数时需要注意传递参数的位置是否正确。常见的传递参数为数值或字符串数据,有时也会需要传递列表、元组或字典。

程序实例:

def subtract(m, n):
    """减法设计"""
    result = m - n
    print(result)
print("本程序将执行a-b的运算")
a = int(input("a = "))
b = int(input("b = "))
print("a - b = ", end="") # 输出a-b字符串,接下来的输出不换行
subtract(a, b)

执行结果:
在这里插入图片描述

11.2.3 参数默认值的处理

在设计函数时,可以给参数一个默认值,若调用该函数时没有设置参数值,则会采用默认值。需要注意的是:函数设计时,含有默认值的参数必须放在参数列表的最右边,否则会出错。

程序实例:

# 定义函数
def greeting(name = 'python'):
    """传递1个参数的函数设计"""
    print("Hello,", name)
greeting('James')
greeting()

执行结果:

Hello, James
Hello, python

11.3 函数返回值

11.3.1 返回None

当设计函数时没有“return [返回值]”部分时,Python在直译时会自动返回处理成“return None”,相当于返回None。None在Python中独立成为一个数据类型:NoneType

程序实例:

# 定义函数
def greeting(name = 'python'):
    """传递1个参数的函数设计"""
    print("Hello,", name)
ret_value = greeting()
print("greeting()返回值为:", ret_value, ",数据类型为:", type(ret_value))

执行结果:

Hello, python
greeting()返回值为: None ,数据类型为: <class 'NoneType'>

当函数设计时有return,但没有返回值时,Python也将自动处理成return None。

程序实例:

# 定义函数
def greeting(name = 'python'):
    """传递1个参数的函数设计"""
    print("Hello,", name)
    return 
ret_value = greeting()
print("greeting()返回值为:", ret_value, ",数据类型为:", type(ret_value))

执行结果:

Hello, python
greeting()返回值为: None ,数据类型为: <class 'NoneType'>

11.3.2 简单返回数值数据

参数具有返回值功能,可以大大增加程序的可读性。

程序实例:

def subtract(x1, x2):
    """减法设计"""
    result = x1 - x2
    return result   # 返回减法结果
print("本程序将执行a - b的运算")
a = int(input("a = "))
b = int(input("b = "))
print("a - b = ", subtract(a, b)) # 输出a-b字符串和结果

执行结果:
在这里插入图片描述

11.3.3 返回多种数据

使用return返回函数数据时,允许返回多种数据,各种数据之间以逗号”,“隔开。

程序实例:

def multifunction(x1, x2):
    """加减乘除四则运算"""
    result_add = x1 + x2
    result_sub = x1 - x2
    result_mul = x1 * x2
    result_div = x1 / x2
    # 返回加、减、乘、除的结果
    return (result_add, result_sub, result_mul, result_div)

x1 = x2 = 10
add, sub, mul, div = multifunction(x1, x2)
print("加法结果:", add)
print("减法结果:", sub)
print("乘法结果:", mul)
print("除法结果:", div)

执行结果:

加法结果: 20
减法结果: 0
乘法结果: 100
除法结果: 1.0

11.3.4 简单返回字符串数据

程序实例:

def findByKey(k, dic = set()):
    boolean = k in dic
    if boolean == True:
        result = '是该集合的成员'
    else:
        result = '不是该集合的成员'
    return result

res1 = findByKey(1, {1, 3, 5, 7, 9})
res2 = findByKey('apple', {'orange', 'pear'})
print(res1)
print(res2)

执行结果:

是该集合的成员
不是该集合的成员

11.4 调用函数时参数为列表

在调用函数时,可以将列表(可以是由数值字符串字典组成)作为参数传递给函数,然后函数可以遍历列表内容,执行更进一步操作。

程序实例:

def mail_msg(recipients):
    str1 = '尊敬的用户:'
    str2 = '恭喜您被天上掉下来的馅饼砸中!快来看看吧!'
    str3 = '404'
    for recipient in recipients:
        msg = str1 + recipient + 'n' + str2 + 'n' + str3
        print(msg, 'n')

members = ['声微饭否', '奇怪的打野', 'bug搬运工']
mail_msg(members)

执行结果:

尊敬的用户:声微饭否
恭喜您被天上掉下来的馅饼砸中!快来看看吧!
404

尊敬的用户:奇怪的打野
恭喜您被天上掉下来的馅饼砸中!快来看看吧!
404

尊敬的用户:bug搬运工
恭喜您被天上掉下来的馅饼砸中!快来看看吧!
404

11.5 传递任意数量的参数

11.5.1 传递并处理任意数量的参数

在设计函数时,可能会遇到多个参数传递到该函数的情况。

程序实例:

# “*”表示可以有1个或多个参数传递到此函数中
def make_icecream(*toppings):
    print("这个冰淇淋所加配料如下:")
    for topping in toppings:
        print("--- ", topping)

make_icecream('草莓酱')
make_icecream('草莓酱', '奶油', '巧克力')

执行结果:

这个冰淇淋所加配料如下:
---  草莓酱
这个冰淇淋所加配料如下:
---  草莓酱
---  奶油
---  巧克力

11.5.2 设计含有一般参数与任意数量参数的函数

程序设计时,会遇上需要传递一般参数与任意数量参数的情况,这时任意数量的参数必须放在最右边。

程序实例:

# “*”表示可以有1个或多个参数传递到此函数中
def make_icecream(icecream_type, *toppings):
    print(icecream_type,"冰淇淋所加配料如下:")
    for topping in toppings:
        print("--- ", topping)

make_icecream('香草', '草莓酱')
make_icecream('芒果', '草莓酱', '奶油', '巧克力')

执行结果:

香草 冰淇淋所加配料如下:
---  草莓酱
芒果 冰淇淋所加配料如下:
---  草莓酱
---  奶油
---  巧克力

11.6 局部变量与全局变量

如果某个变量只能在函数内使用,影响范围限定在这个函数内,那么这个变量就称为局部变量(local variable)。如果某个变量的影响范围是整个程序,则这个变量称为全局变量(global variable)。

Python程序在调用函数时,会创建一个内存工作区间,在这个内存工作空间可以处理属于这个函数的变量。当函数工作结束,返回原先呼叫程序时,这个内存工作区间就被收回,原先存在的变量也将被销毁,因此局部变量的影响范围只限定在所属的函数内。

对于全局变量而言,一般是在主程序内创建。程序在执行时,不但主程序可以引用,所有属于这个程序的函数也可以引用,因此它的影响范围是整个程序。

11.6.1 全局变量的使用范围

一般在主程序内创建的变量称为全局变量,这个变量可以被主程序以及程序内的所有函数引用。

程序实例:

def printmsg():
    print("函数打印:",msg)

msg = 'Hello world'     # 设置全局变量
print("主程序打印:", msg)
printmsg()      # 调用函数

执行结果:

主程序打印: Hello world
函数打印: Hello world

11.6.2 局部变量与全局变量同名

如果全局变量与函数内的局部变量使用相同的名称,那么,在局部变量所在的函数中使用局部变量的内容,其它区域则使用全局变量的内容。

程序实例:

def printmsg():
    msg = 'Hello, python'
    print("函数打印:",msg)

msg = 'Hello world'     # 设置全局变量
print("主程序打印:", msg)
printmsg()      # 调用函数

执行结果:

主程序打印: Hello world
函数打印: Hello, python

11.6.3 程序设计的注意事项

一般程序设计时,有关使用局部变量需要注意以下几点,否则程序会有错误产生。

  • 局部变量内容无法在其他函数引用。
  • 局部变量内容无法在主程序引用。
  • 一般在函数内不能修改全局变量的值,除非在函数内使用global声明此变量。

程序实例:

def printmsg():
    global msg      # 使用global声明全局变量
    msg = "php"     # 更改全局变量
    print("更改后:", msg)

msg = "Python"
print("更改前:", msg)
printmsg()

执行结果:

更改前: Python
更改后: php

11.7 匿名函数lambda

匿名函数是指没有名称的函数,Python使用def来定义一般函数,使用lambda来定义匿名函数。匿名函数的最大特点是可以有许多参数,但只能有一个程序代码语句,可以将执行结果返回。

lambda arg1[, arg2, ..., argn]:expression # arg1是参数,可以有多个参数

程序实例:

# 单一参数的匿名函数
# 定义lambda函数
square = lambda x: x**2     # 返回平方值

print(square(5))

# 多个参数的匿名函数
add = lambda a,b: a+b       # 返回a+b的和

print(add(3, 8))

执行结果:

25
11
  • lambda的参数形式
# 1.无参数
fn1 = lambda: 10
print(fn1())  # 10

# 2.一个参数
fn2 = lambda a: a
print(fn2('hello'))  # hello

# 3.默认参数/缺省参数
fn3 = lambda a, b, c = 10: a + b + c
print(fn3(1, 3))  # 14

# 4.可变参数:*args
# 返回值为元组
fn4 = lambda *args: args
print(fn4(1, 2, 3))  # (1, 2, 3)

# 5.可变参数:**kwargs
# 返回值为字典
fn5 = lambda **kwargs: kwargs
print(fn5(name='Tom', age=18, gender='female'))  # {'name': 'Tom', 'age': 18, 'gender': 'female'}
print(fn5(age=13))  # {'age': 13}
  • lambda的应用示例:
# 1.带判断的lambda
fn1 = lambda a, b: a if a > b else b
print(fn1(9, 3))  # 9
print(fn1(1, 2))  # 2

# 2.列表数据按字典key的值排序
students = [
    {'name': 'Tom', 'age': 20},
    {'name': 'Judy', 'age': 18},
    {'name': 'Lucy', 'age': 28}
   ]

# 按name值升序排列
students.sort(key=lambda x: x['name'])
print(students)
# [{'name': 'Judy', 'age': 18}, {'name': 'Lucy', 'age': 28}, {'name': 'Tom', 'age': 20}]

# 按name值降序排列
students.sort(key=lambda x: x['name'], reverse=True)
print(students)
# [{'name': 'Tom', 'age': 20}, {'name': 'Lucy', 'age': 28}, {'name': 'Judy', 'age': 18}]

# 按age值升序排列
students.sort(key=lambda x: x['age'])
print(students)
# [{'name': 'Judy', 'age': 18}, {'name': 'Tom', 'age': 20}, {'name': 'Lucy', 'age': 28}]

往期文章:

  • 《Python零基础快乐学习之旅》学习笔记2——认识变量与基本数学运算
  • 《Python零基础快乐学习之旅》学习笔记3——Python的基本数据类型
  • 《Python零基础快乐学习之旅》学习笔记4——基本输入与输出
  • 《Python零基础快乐学习之旅》学习笔记5——程序的流程控制使用if语句
  • 《Python零基础快乐学习之旅》学习笔记6——列表(list)
  • 《Python零基础快乐学习之旅》学习笔记7——循环设计
  • 《Python零基础快乐学习之旅》学习笔记8——元组(tuple)
  • 《Python零基础快乐学习之旅》学习笔记9——字典(dict)
  • 《Python零基础快乐学习之旅》学习笔记10——集合(set)

最后

以上就是冷静皮带为你收集整理的《Python零基础快乐学习之旅》学习笔记11——函数设计第11章 函数设计的全部内容,希望文章能够帮你解决《Python零基础快乐学习之旅》学习笔记11——函数设计第11章 函数设计所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(86)

评论列表共有 0 条评论

立即
投稿
返回
顶部