栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

2022年5月20日学习笔记

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

2022年5月20日学习笔记

Python学习笔记

第八章 函数
  • 一、定义函数
  • 二、传递实参
  • 三、返回值
  • 四、传递列表
  • 五、传递任意数量的实参
  • 六、将函数存储在模块中


一、定义函数
  • 使用关键字 def 来定义函数
  • 形参:函数完成其工作所需的一项信息
  • 实参:调用函数时传递给函数的信息
def greet_user(user_name): #此处user_name为形参
    print("Hello, " + user_name.title() + '!')
greet_user('jeese') #此处'jeese'为实参

输出结果为:
Hello, Jeese!
  • 在greet_user( ‘jeese’ )中,将实参 ‘jeese’ 传递给了函数greet_user(),这个值被存储在形参user_name中。
二、传递实参

1、位置实参

  • 基于实参的顺序关联到形参上
def describe_pet(animal_type, pet_name):
    print("nI have a " + animal_type +'.')
    print("My " + animal_type + "'s name is " + pet_name)
describe_pet('dog', 'jianhuang') #按顺序输入实参

输出结果为:
I have a dog.
My dog's name is jianhuang

2、关键字实参

  • 关键字实参是传递给函数的名称-值对
  • 直接在实参中将名称和值关联起来
  • 关键字实参无需考虑函数调用中的实参顺序,还清楚地指出了函数调用中各个值的用途
def describe_pet(animal_type, pet_name):
    print("nI have a " + animal_type +'.')
    print("My " + animal_type + "'s name is " + pet_name)
describe_pet( pet_name='jianhuang', animal_type='dog')

输出结果为:
I have a dog.
My dog's name is jianhuang

3、默认值

  • 编写函数时,可给每个形参指定默认值
  • 在调用函数中给形参提供了实参时,Python会使用指定的实参值,否则将使用形参的默认值
  • 使用默认值时,在形参列表中必须先列出没有默认值的形参,再列出有默认值的形参,这让Python依然能够正确的解读位置实参
def describe_pet(pet_name, animal_type = 'dog'):
    print("nI have a " + animal_type +'.')
    print("My " + animal_type + "'s name is " + pet_name)
describe_pet('jianhuang') #pet_name的位置形参

输出结果为:
I have a dog.
My dog's name is jianhuang

4、等效的函数调用

  • 灵活搭配
def describe_pet(pet_name, animal_type = 'dog'):
    print("nI have a " + animal_type +'.')
    print("My " + animal_type + "'s name is " + pet_name)
describe_pet('jianhuang')
describe_pet(pet_name='jianhuang')

describe_pet('jianhuang', 'hamster')
describe_pet(pet_name = 'jianhuang', animal_type = 'dog')
describe_pet(animal_type = 'dog', pet_name = 'jianhuang')

输出结果为:
I have a dog.
My dog's name is jianhuang

I have a dog.
My dog's name is jianhuang

I have a hamster.
My hamster's name is jianhuang

I have a dog.
My dog's name is jianhuang

I have a dog.
My dog's name is jianhuang
  • 注意形参和实参相匹配(个数、位置)
三、返回值

1、返回简单值

  • 使用return语句将值返回到调用函数的代码行

2、可选实参

  • 给形参指定默认值——空字符串,让用户在没有提供相应实参时,不使用该实参
  • Python将非空字符串解读为True
def get_formatted_name(first_name, last_name, middle_name = ''):
    if middle_name: #注意用法
        full_name = first_name + ' ' + middle_name + ' ' + last_name
    else:
        full_name = first_name + ' ' + last_name
    return full_name.title() 
musician = get_formatted_name('jimi','hendrix')
print(musician)
musician = get_formatted_name('john', 'hooker', 'lee')
print(musician)

输出结果为:
Jimi Hendrix
John Lee Hooker

3、返回字典

def build_person(first_name, last_name, age = ''):
    person = {'first':first_name, 'last':last_name,}
    if age:
        person['age'] = age
    return person
musician = build_person('jimi', 'hendrix', age=18)

输出结果为:
print(musician)
{'first': 'jimi', 'last': 'hendrix', 'age': 18}

4、结合使用函数和while循环

def get_formatted_name(first_name, last_name):
    full_name = first_name + ' ' + last_name
    return full_name.title()
while True:
    print("nPlease tell me your name: ")
    print("(Enter 'q' at any time to quit)")
    f_name = input("First name: ")
    if f_name == 'q':
        break
    l_name = input("Last name: ")
    if l_name == 'q':
        break
    formatted_name = get_formatted_name(f_name, l_name)
    print("nHello, " + formatted_name + "!")

输出结果为:
Please tell me your name: 
(Enter 'q' at any time to quit)
First name: Xiao
Last name: Ming

Hello, Xiao Ming!

Please tell me your name: 
(Enter 'q' at any time to quit)
First name: q

或者定义一个标志来退出循环:

def get_formatted_name(first_name, last_name):
    full_name = first_name + ' ' + last_name
    return full_name.title()
positive_active = '' #定义一个标志
while not positive_active:
    print("nPlease tell me your name: ")
    f_name = input("First name: ")
    l_name = input("Last name: ")
    formatted_name = get_formatted_name(f_name, l_name)
    print("nHello, " + formatted_name + "!")
    positive_active = input("键入任何值以退出,键入回车继续填写:n")

输出结果为:
Please tell me your name: 
First name: Xiao
Last name: Ming

Hello, Xiao Ming!
键入任何值以退出,键入回车继续填写:


Please tell me your name: 
First name: Xiao
Last name: Gang

Hello, Xiao Gang!
键入任何值以退出,键入回车继续填写:
12331

四、传递列表
  • 将复杂任务划分成一系列的步骤
def print_models(unprinted_models, completed_models):
    while unprinted_models:
        current_design = unprinted_models.pop()
        print("Printing model: " + current_design)
        completed_models.append(current_design)
def show_completed_models(completed_models):
    print("nThe followinf models have been printed: ")
    for completed_model in completed_models:
        print(completed_model)
unprinted_models = ['iphone case', 'robot pendant', 'dodecahedron']
completed_models = []
print_models(unprinted_models, completed_models)
show_completed_models(completed_models)

输出结果为:
Printing model: dodecahedron
Printing model: robot pendant
Printing model: iphone case

The followinf models have been printed: 
dodecahedron
robot pendant
iphone case

1、全局变量和局部变量

  • 全局变量和局部变量的区别在于作用域
  • 全局变量在整个py文件中声明,全局范围内可以使用
  • 局部变量是在某个函数内部声明的,只能在函数内部使用,如果超出使用范围(函数外部),则会报错
  • 以上代码中,unprinted_models和completed_models均为全局变量,因此可以不用在函数中使用return输出便可直接使用
  • 一个函数只能return一个变量、列表、字典,其余结果可使用print函数直接打印

#以下代码由于未使用return而报错

A = 100
def sum():
    a = 50
    print(A+a)
sum()
print(A)
print(a)

输出结果为:
150
100
Traceback (most recent call last):
  File "D:Python_WorkPython学习Python编程-从入门到实践练习.py", line 7, in 
    print(a)
NameError: name 'a' is not defined

#以下代码改进后全部输出

A = 100
def sum():
    a = 50
    print(A+a)
    return a
a = sum()
print(A)
print(a)

输出结果为:
150
100
50

2、禁止函数修改列表

  • 使用切片表示法创建列表副本
  • 列表 list[:] 为列表 list 的副本,两者修改并不关联
五、传递任意数量的实参

1、结合使用位置实参和任意数量实参

  • 使用 *variable 来传递任意数量的 非关键字实参
  • *variable 让Python创建一个名为variable的空元组,并将收到的所有值都封装到这个元组中
#元组示例
def make_pizza(size, *toppings):
    print("nMaking a " + str(size) + "-inch pizza with the following toppings: ")
    print(toppings)
make_pizza(12, 'pepperoni')
make_pizza(15, 'mushrooms','green peppers','extra cheese')

输出结果为:
Making a 12-inch pizza with the following toppings: 
('pepperoni',)

Making a 15-inch pizza with the following toppings: 
('mushrooms', 'green peppers', 'extra cheese')

2、使用任意数量的关键字实参

  • 使用 **variable 来传递任意数量的的 关键字实参
  • **variable中的两个星号让Python创建一个名为variable的空字典,并将收到的所有名称-值对都封装到这个字典中
#字典示例
def build_profile(first, last, **user_info):
    profile = {}
    profile['First name'] = first.title()
    profile['Last name'] = last.title()
    for key, value in user_info.items():
        profile[key.title()] = value.title()
    return profile
user_profile = build_profile('albert', 'einstein',
                             location = 'princeton',
                             field = 'physics')
print(user_profile)

输出结果为:
{'First name': 'Albert', 'Last name': 'Einstein', 'Location': 'Princeton', 'Field': 'Physics'}
  • 希望使用任意数量的非关键字实参时,使用 *variable , 希望使用任意数量的关键字实参时,使用 **variable
六、将函数存储在模块中
语法描述
import module_name导入模块module_name,若想使用模块中的函数,使用:module_name.function_name()
from module_name import function_name导入模块中的函数,可以直接使用
from module_name import function_name as fn使用as给函数指定别名(同样可以使用as给模块指定别名)
from module_name import *导入模块中的所有函数

注:

  • 给形参指定默认值、调用关键字实参时,等号两边不要有空格
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/920976.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号