Python3学习笔记---函数

1、定义函数       格式: def 函数名(参数1,参数2,参数3---):

def greet_user(username):
    print("Hello," + username.title() + "!")

greet_user('Kris')

>>>Hello,Kris!

2、实参和形参:

形参:在上面的函数中,变量username是一个形参----函数完成其工作所需的一项信息。(函数定义中

实参:greet_user('Kris') 中,值‘Kris’是一个实参---调用函数时传递给函数的信息。(函数调用时

3、传递实参

函数调用时,python必须将函数调用中的每个实参都关联到函数定义中的一个形参。最简单的联系方式就是基于实参的顺序,这种关联方式称为位置实参。

def describe_pet(animal_type, pet_name):          ######animal_type, pet_name为形参
    #显示宠物信息
    print("\nI have a " + animal_type + ".")
    print("My "+ animal_type + "'s name is " + pet_name.title()+".")
    
describe_pet('hamster', 'harry')                  ###'hamster', 'harry'为实参

>>>I have a hamster.
      My hamster's name is Harry.

关键字实参:是传递给函数的名称-值对。直接在实参中将名称和值关联起来,无需考虑函数中的实参顺序,还指出了函数调用中各个值的用途

def describe_pet(animal_type, pet_name):
    #显示宠物信息
    print("\nI have a " + animal_type + ".")
    print("My "+ animal_type + "'s name is " + pet_name.title()+".")

describe_pet(animal_type = 'hamster', pet_name = 'harry')

>>>I have a hamster.
      My hamster's name is Harry.

默认值:编写函数时,给每个形参指定默认值。在调用函数中给形参提供了实参时,python将使用指定的实参;否则,使用默认值。

def describe_pet( pet_name, animal_type = 'dog'):
    #显示宠物信息
    print("\nI have a " + animal_type + ".")
    print("My "+ animal_type + "'s name is " + pet_name.title()+".")

describe_pet( pet_name='harry')

>>>I have a dog.
      My dog's name is Harry.      

返回值:

函数并非总是直接输出,相反,它可以处理一些数据,并返回一个或一组值。函数返回的值被称为返回值。

在函数中,可使用return语句将值返回到调用函数的代码行。返回值让你能够将大部分的繁重工作转移到函数中去完成。从而简化主程序。

def get_formatted_name(first_name, last_name):
    '''返回整洁的姓名'''
    full_name = first_name + ' '+last_name
    return(full_name.title())

musician = get_formatted_name('jimi', 'hendrix')
print(musician)

>>>Jimi Hendrix

让实参变成可选的:给可选参数指定一个默认值-空字符串,并将其移到列表的末尾。

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()


musician1 = get_formatted_name('jimi', 'hendrix')   #只有first_name, last_name
musician2 = get_formatted_name('jimi', 'hendrix', 'lee')  #拥有first_name, last_name, middle_name
print(musician1)
print(musician2)

>>>Jimi Hendrix
      Jimi Lee Hendrix

返回字典:函数可以返回任何类型的值,包括列表和字典等比较复杂的数据结构。

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=12)
print(musician)

>>>{'first': 'jimi', 'last': 'hendrix', 'age': 12}

结合使用函数和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:Kris  #加粗字体为input用户输入
Last_name:Wu

Hello, Kris Wu!

Please tell me your name :
(enter 'q' at any time to quit)
First_name:q

Process finished with exit code 0

传递列表:向函数传递列表很有用,这种列表包含的可能是名字、数字或者更复杂的对象(字典)。将列表传递给函数后,函数就能直接访问其内容。

示例:

def greet_user(names):
    '''向列表中的每位用户发出简单的问候'''
    for name in names:
        msg = "Hello, " + name.title() + ", I love you !"
        print(msg)


usernames = ['Kris', 'Lay',"Tao"]
greet_user(usernames)

>>>

Hello, Kris, I love you !
Hello, Lay, I love you !
Hello, Tao, I love you !

在函数中修改列表:将列表传递给函数后,函数就可以对其进行修改。在函数中对这个列表所做的任何修改都是永久性的,这可以让你高效的处理大量数据

示例

def print_models(unprinted_designs, completed_models):
    """
    模拟打印每个设计,直到没有打印的设计为止
    打印每个设计后,都将其移到列表completed_models中
    """
    while unprinted_designs:
        current_design = unprinted_designs.pop()
        #模拟根据设计制作3D打印模型的过程
        print("Printing model:" + current_design)
        completed_models.append(current_design)


def show_completed_models(completed_models):
    """显示打印好的模型"""
    print("\nThe following models have been printed:")
    for completed_model in completed_models:
        print(completed_model)


unprinted_designs = ['iphone case', 'robot pendant', 'dodecahedron']
completed_models = []

print_models(unprinted_designs, completed_models)
show_completed_models(completed_models)

>>>

Printing model:dodecahedron
Printing model:robot pendant
Printing model:iphone case

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

禁止函数修改列表:向函数传递副本,而非原件可像如下操作

function_name(list_name[:])

传递任意数量的实参:

格式: def 函数名(参数1,参数2,*参数3)#形参名*参数3中的星号含义是让python创建一个名为参数3的空元组,并将所有收到的值封装到这个元组中。

            def 函数名参数1,参数2,**参数3#形参名**参数3中的星号含义是让python创建一个名为参数3的键-值对,并将所有收到的值封装到这个字典中。在这种情况下,可将函数别写成能够接受任意数量的键-值对----调用语句提供多少就接受多少。

示例1:

def make_pizza(*toppings):
    """概述要制作的pizza"""
    print("\nMaking a pizza with the following toppings:")
    for topping in toppings:
        print("- " + topping)


make_pizza('pepperoni')
make_pizza('mushrooms', 'green peppers', 'extra cheese')

>>>

Making a pizza with the following toppings:
- pepperoni

Making a pizza with the following toppings:
- mushrooms
- green peppers
- extra cheese

示例2:

def build_profile(first, last, **user_info):
    """创建一个字典,其中包含我们指导的用户的一切"""
    profile = {}
    profile['first_name'] = first
    profile['last_name'] = last
    for key, value in user_info.items():
        profile[key] = value
    return profile


user_profile = build_profile('albert', 'einstein', location='princeton', field='physics')
print(user_profile)

>>>

{'location': 'princeton', 'last_name': 'einstein', 'first_name': 'albert', 'field': 'physics'}

将函数存储在模块中

模块:扩展名为.py的文件,包含要导入到程序中代码。

import 模块名:让python打开文件模块名.py,并将其中的所有函数都复制到这个程序中。

使用as给模块指定别名:import module_name as 别名

导入模块中所有的函数:使用星号(*)运算符导入模块中所有的函数        格式: from module_name import *

编程规范:

给形参指定默认值时,等号两边不要有空格,对于函数调用中的关键字实参,也应遵循这种约定。

所有的import 语句都应该放在文件开头,唯一例外的情形是,在文件开头使用了注释来描述整个程序。

如果程序或者模块包含多个函数,可使用两个空行将相邻的函数分开。

PEP8 建议代码行的长度不要超过79个字符。

一个Tab 键 = 4个空格。

备注:

Python3学习笔记的来源是《Python编程从入门到实战》作者:Eric Matths【美】    袁国忠  译

Python 3 入门推荐小詹学Python,网址 https://mp.weixin.qq.com/s/d2VWSKB29PWgQc80A5uIgA

里面一些东西总结的非常简洁清晰。

猜你喜欢

转载自blog.csdn.net/qq_33690342/article/details/82463108