python学习(八)函数 下

传递列表

  • 将列表传递给函数后,函数就可以直接访问其内容。
def greet_users(names):
    for name in names:
        mgs = "Hello " + name.title() + "."
        print(mgs)
usernames = ['harry','bobo','sky']
greet_users(usernames)

Hello Harry.
Hello Bobo.
Hello Sky.
[Finished in 0.1s]

在函数中修改列表

  • 将函数传递给列表,函数就可以对其进行修改。
  • 函数对列表所做的任何修改都是永久性的。
unprinted_desigins = ['iphonr case','rebot pendent','dodecaheron']
completed_models = []
while unprinted_desigins:
    current_desigin = unprinted_desigins.pop()
    print("Printing model: " + current_desigin)
    completed_models.append(current_desigin)

print("\nThe following model have been printed: ")
for completed_model in completed_models:
    print(completed_model)
    
Printing model: dodecaheron
Printing model: rebot pendent
Printing model: iphonr case

The following model have been printed: 
dodecaheron
rebot pendent
iphonr case
[Finished in 0.1s]
  • 编写两个函数,
  • 一个函数负责:打印设计工作
  • 另一个函数负责打印了那些设计
def print_models(unprinted_desigins,completed_models):
    while unprinted_desigins:
        current_desigin = unprinted_desigins.pop()
        print("Printing model: " + current_desigin)
        completed_models.append(current_desigin)

def show_completed_models(completed_models):
    print("\nThe following model have been printed: ")
    for completed_model in completed_models:
        print(completed_model)

unprinted_desigins = ['iphonr case','rebot pendent','dodecaheron']
completed_models = []
print_models(unprinted_desigins,completed_models)
show_completed_models(completed_models)

Printing model: dodecaheron
Printing model: rebot pendent
Printing model: iphonr case

The following model have been printed: 
dodecaheron
rebot pendent
iphonr case
[Finished in 0.1s]

禁止在函数中修改列表

  • 使用切片发[:]创建列表的副本。
  • 向函数传递列表的副本而不是原件,这样函数的任何修改就只影响副本,而不影响原件。

传递任意数量的参数

  • 使用*形参名,允许函数调用语句中收集任意实参。
def make_pizza(*toppings):
    print(toppings)

make_pizza("aa")
make_pizza("mushrooms",'green peppers')

('aa',)
('mushrooms', 'green peppers')
[Finished in 0.1s]
  • 对列表进行遍历
def make_pizza(*toppings):
    print("\nMakeing a pizza with the follwing toppings: ")
    for topping in toppings:
        print("- " + topping)

make_pizza("aa")
make_pizza("mushrooms",'green peppers')


Makeing a pizza with the follwing toppings: 
- aa

Makeing a pizza with the follwing toppings: 
- mushrooms
- green peppers
[Finished in 0.1s]

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

  • 让函数接受不同类型的实参,必须在函数定义中将接纳任意数量实参的形参放在最后面。
  • python优先匹配位置实参和关键字实参
def make_pizza(size,*toppings):
#   print("\nMakeing a pizza with the follwing toppings: ")
    print("\nMakeing a " + str(size) +
         "-inch pizza with the follwing topings: ")
    for topping in toppings:
        print("- " + topping)

make_pizza(8,"mushrooms")
make_pizza(9,"mushrooms",'green peppers','extra cheese')


Makeing a 8-inch pizza with the follwing topings: 
- mushrooms

Makeing a 9-inch pizza with the follwing topings: 
- mushrooms
- green peppers
- extra cheese
[Finished in 0.1s]

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

  • 接受任意数量的实参时,预先不知道会传递给函数什么样的信息。
  • 这种情况可将函数编写成能接受任意数量的键-值对,**形参名
def build_user(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_user("kami",'lalun',location="pricetion",filed='physics')
print(user_profile)

{'first_name': 'kami', 'last_name': 'lalun', 'location': 'pricetion', 'filed': 'physics'}
[Finished in 0.1s]
  • **user_info两个星号让python创建了一个名为user-info的字典

将函数存储在模块中

  • 函数的优点,可以代码块与主程序分离,

  • 将函数存储在称之为模块的独立文件中,然后再impor导入模块。

  • 存储模块,1.可以隐藏代码细节,将重点放在程序的更高逻辑上。2.在不能程序中重用函数。3.与其他程序员共享文件而不是整个程序。

导入模块

  • 创建一个模块pizza.py
def make_pizza(size,*toppings):
    print("\nMakeing a " + str(size) +
         "-inch pizza with the follwing topings: ")
    for topping in toppings:
        print("- " + topping)
  • 在pizza.py的文件创建另一个名为makeing_pizza.py的文件、
import pizza
pizza.make_pizza(9,'moshrooms')
pizza.make_pizza(100,'aa','bb','cc')


Makeing a 9-inch pizza with the follwing topings: 
- moshrooms

Makeing a 100-inch pizza with the follwing topings: 
- aa
- bb
- cc
[Finished in 0.1s]

导入特定函数

  • 导入模块中的特定的函数
from module_name import function_name
  • 用逗号隔开函数名,从模块导入任意需要数量的函数。
from module_name import function_name1,function_name2,function_name3
from pizza import make_pizza
make_pizza(9,'aa')

Makeing a 9-inch pizza with the follwing topings: 
- aa
[Finished in 0.1s]

使用as给函数指定别名

  • 关键字as将函数重命名为你提供的别名。
from pizza import make_pizza as mp
mp(9,'aa')


Makeing a 9-inch pizza with the follwing topings: 
- aa
[Finished in 0.1s]

用as给模块指定别名

import  module_name as mn
import pizza as mp
mp.make_pizza(9,'aa')


Makeing a 9-inch pizza with the follwing topings: 
- aa
[Finished in 0.1s]

导入模块中所有的函数。

  • 使用星号(*)让python导入模块中所有的函数。
from pizza import *
make_pizza(100,'moshrooms')

Makeing a 100-inch pizza with the follwing topings: 
- moshrooms
[Finished in 0.1s]

函数编写指南

  • 给函数指定描述性名称。
  • 每个函数都要阐述七功能的注释。
  • 给形参指定默认值时,等号两边不要有空格。
def function_name(parameter_0,parameter='default value')
  • 函数调用的关键字实参,同样等号两边不要有空格。
function_name(value_0,patameter='value_1')

总结

  • 如何编写函数
  • 如何传递实参。
  • 如何使用位置实参和关键字实参,以及接受任意数量的实参
  • 显示输出的函数和返回值函数。
  • 如何将函数通列表,字典、if语句和while语句结合使用
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容