Python学习入门之函数

Python学习入门之函数

函数是带名字的代码块,用于完成具体的工作
函数的简单示例

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

greet_user("jesse")

在以上函数greet_user()定义中,变量username是一个形参——函数完成其工作所需的一项信息
在greet_user(“jesse”)中,值"jesse"是一个实参。实参是调用函数时传递给函数的信息.
我们调用函数时,要将函数使用的信息放在括号内。在greet_user()中,将实参"jesse"传递给了函数greet_user(),这个值被存储在形参username中。

传递实参

函数定义中可能包含多个形参,所以函数调用中也可能包含多个实参。

位置实参

这要求实参的顺序与形参的顺序相同

def describe_pet(animal_type,pet_name):
    print("\nI have a " + animal_type + ".")
    print("My " + animal_type + " 's name is " + pet_name)

describe_pet("cat","Tom")

关键字实参

是传递给函数的名称-值对,其中每个实参都由变量名和值组成;还可以使用字典和列表

describe_pet(animal_type = "cat",pet_name = "Tom")
describe_pet(pet_name = "Tom",animal_type = "cat")

默认值

编写函数时,可以给每一个形参指定默认值,在调用函数中给形参提供实参时,Python将使用指定的实参值;否则,将使用默认值。
使用默认值可以使实参变成可选的

def describe_pets(pet_name,animal_type="dog"):
    print("\nI have a " + animal_type + ".")
    print("My " + animal_type + " 's name is " + pet_name)

describe_pets(pet_name = "Tom")

注意:使用默认值时,在形参列表中先列出没有默认值的形参,在列出有默认值的形参。这让Python,依然能够正确地解读位置实参

返回值

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

def get_formatted_name(first_name,last_name):
    full_name = first_name +" " + last_name
    return full_name.title()
musician = get_formatted_name("wand","lina")
print(musician)

返回字典

def build_person(first_name,last_name):
    person = {'first':first_name,'last':last_name}
    return person
musician = build_person("wang","lina")

传递列表

def greet_users(names):
    for name in names:
        msg = "Hello, " + name.title() + "!"
        print(msg)

usernames = ["zr","hk","hj","ws","fz"]
greet_users(usernames)

传递任意数量的实参

*toppings 中的星号让python创建一个名为toppings的空元组,并将收到的所有值都封装到这个元组中

def make_pizza(*toppings):
    for topping in toppings:
        print(topping)

make_pizza("pepperoni")
make_pizza("green peppers","mushroom","extra cheese")

结合使用位置实参和任意数量实参可以让函数接受不同类型的实参,必须在函数定义中将接纳任意数量实参的形参放在最后

def make_pizza(size,*toppings):
    print("\nMaking a " + str(size) + "-inch pizza with following toppings:")
    for topping in toppings:
        print(topping)

make_pizza(12,"pepperoni")
make_pizza(16,"green peppers","mushroom","extra cheese")

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

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",loction = "princetion",field = "student")
print(user_profile)

将函数存储在模块中

#函数的优点之一是,使用它们可将代码块与主程序分离,通过给函数指定描述性名称,可让主程序容易理解的多,还可以更进一步,将函数存储到在被称为模块的独立文件中,再将模块导入到主程序中。

导入整个模块

import语句中允许在当前运行的程序文件中使用模块中的代码,如果使用这种语句就可以使用下面的语法来使用其中任何一个函数:

module_name.function_name()

pizza.py

def make_pizza(size,*toppings):
    print("\nMaking a " + str(size) + "-inch pizza with following toppings:")
    for topping in toppings:
        print(topping)

making_pizzas.py

import pizza

pizza.make_pizza(12,"pepperoni")
pizza.make_pizza(16,"green peppers","mushroom","extra cheese")

导入特定的函数

可以使用下面语句导入模块的中特定函数

from module_name import function_name

通过用逗号分隔函数名,可根据需要从模块中导入任意数量的函数

from module_name import function_0,function_1,function_2

使用as指定别名

如果要导入的函数名称可能与程序中现有的名称冲突,或者函数名称太长,可以指定简短的而独一无二的别名
关键字as将函数重命名为你提供的别名,通用语法如下:

from module_name import function_name as fn

简单示例

from pizza import make_pizza as mp

mp (12,"pepperoni")
mp (16,"green peppers","mushroom","extra cheese")

还可以给模块别名,通用语法许下

import module_name as mn

导入模块中的所有函数

使用星号(*)运算符可让Python导入模块中的所有函数,由于导入了每个函数,可通过名称来调用每个函数,而无需使用句点表示法
通用语法如下:

from module_name import *

函数编写指南

  1. 应给函数指定描述性名称,且只在其中使用小写字母和下划线。描述性名称可帮助你和别人明白代码想要做什么。给模块命名时也应遵循上述约定。
  2. 每个函数都应包含简要地阐述其功能的注释,该注释应紧跟在函数定义后面,并采用文档字符串格式。文档良好的函数让其他程序员只需阅读文档字符串中的描述就能够使用它:他们完全可以相信代码如描述的那样运行;只要知道函数的名称、需要的实参以及返回值的类型,就能在自己的程序中使用它。
  3. 给形参指定默认值时,等号两边不要有空格
  4. 建议代码行的长度不要超过79字符,这样只要编辑器窗口适中,就能看到整行代码。如果形参很多,导致函数定义的长度超过了79字符,可在函数定义中输入左括号后按回车键,并在下一行按两次Tab键,从而将形参列表和只缩进一层的函数体区分开来。大多数编辑器都会自动对齐后续参数列表行,使其缩进程度与你给第一个参数列表行指定的缩进程度相同
  5. 如果程序或模块包含多个函数,可使用两个空行将相邻的函数分开,这样将更容易知道前一个函数在什么地方结束,下一个函数从什么地方开始。
  6. 所有的import 语句都应放在文件开头,唯一例外的情形是,在文件开头使用了注释来描述整个程序。

猜你喜欢

转载自blog.csdn.net/fzx1123/article/details/86381427