从函数中修改列表

一家为用户提交的设计制作3D打印模型的公司,需要打印的设计存储在一个列表中,打印后移到另一个列表中。

#!/usr/bin/env python
# -*- coding:utf-8 -*- unprinted_designs = ['iphone case','robot pendant','dodecahedron'] completed_models = []
while unprinted_designs:
current_design = unprinted_designs.pop() print("Printing model:" + current_design)
completed_models.append(current_design) print("\nThe following models have been printed:")
for completed_model in completed_models:
print(completed_model)

未使用函数的实现方式

#!/usr/bin/env python
# --*-- encoding:utf-8 --*--
def print_models(unprinted_designs,completed_models):
while unprinted_designs:
current_design = unprinted_designs.pop()
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)

利用函数实现

采用描述性的函数名;在一个函数中,总是可以调用另一个函数

禁止函数修改列表

切片表示法[:]创建列表的副本,如果不想清空未打印的设计列表,可以这样调用print_models();

print_models(unprinted_designs[:], completed_models)

#!/usr/bin/env python
# --*-- encoding:utf-8 --*--
def print_models(unprinted_designs,completed_models):
while unprinted_designs:
current_design = unprinted_designs.pop()
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[0:2],completed_models)
show_completed_models(completed_models)

切片表示法

传递任意数量的实参

#!/usr/bin/env python
# --*-- encoding:utf-8 --*-- def make_pizza(*toppings):
print(toppings) make_pizza('peppersoni')
make_pizza('mushrooms','green peppers','extra cheese')
('peppersoni',)
('mushrooms', 'green peppers', 'extra cheese')

运行结果

形参名 *toppings中的星号,让Python创建一个名为toppings的空元组,并将收到的所有值都封装在元组中。

#!/usr/bin/env python
# --*-- encoding:utf-8 --*-- def make_pizza(*toppings):
print("\nMaking a pizza with the following toppings:")
for topping in toppings:
print("- " + topping) make_pizza('peppersoni')
make_pizza('mushrooms','green peppers','extra cheese')
Making a pizza with the following toppings:
- peppersoni Making a pizza with the following toppings:
- mushrooms
- green peppers
- extra cheese

运行结果

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

  如果要让函数接收不同类型的实参,必须在函数定义中将接纳任意数量实参的形参放在最后。Python先匹配位置实参和关键字实参,再将余下的实参都收集到最后一个形参中。

#!/usr/bin/env python
# --*-- encoding:utf-8 --*-- def make_pizza(size,*toppings):
print("\nMaking a " + str(size) + "-inch pizza with the following toppings:")
for topping in toppings:
print("- " + topping) make_pizza(16,'pepppersoni')
make_pizza(12,'mushrooms','green peppers','extra cheese')
Making a 16-inch pizza with the following toppings:
- pepppersoni Making a 12-inch pizza with the following toppings:
- mushrooms
- green peppers
- extra cheese

位置实参和任意数量实参

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

有时候需要接收任意数量的实参,但预先不知道传递给函数的会是什么信息,这种情况下,可将函数编写成能够接收任意数量的键值对

#!/usr/bin/env python
# --*-- encoding:utf-8 --*-- 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','dinstein',
location = 'princeton',
field = 'physics')
print(user_profile)

 将函数存储在模块中

1:导入整个模块

pizza.py

#!/usr/bin/env python
# --*-- encoding:utf-8 --*--
def make_pizza(size,*toppings):
print("\nMaking a " + str(size) +
"-inch pizza with the following toppings:")
for topping in toppings:
print("- " + topping)

在pizza.py目录下创建making_pizzas.py

#!/usr/bin/env python
# --*-- encoding:utf-8 --*--

import pizza

pizza.make_pizza(16,'pepperoni')
pizza.make_pizza(12,'mushrooms','green peppers','extra cheese')

Making a 16-inch pizza with the following toppings:
- pepperoni Making a 12-inch pizza with the following toppings:
- mushrooms
- green peppers
- extra cheese

执行结果

2:导入特定的函数:

from module_name import function_name

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

from module_nmae import function_0,function_1,function_2

from pizza import make_pizza

make_pizza(16,'pepperoni')

若使用这种语法,调用函数时就无需使用句点。由于在import语句中显式地导入了函数make_pizza(),因此调用它是只需指定起名字

3:使用AS给函数指定别名

from module_name import function_name as fn

from pizza import make_pizza as mp

mp(16,'pepperoni')

4.使用as给模块指定别名

import pizza as p

p.make_pizza(16,'pepperoni')

5:导入模块中的所有函数

from module_name import *

import语句中的星号让Python将模块pizza中的每个函数都复制到这个程序文件中。由于导入了每个函数,可通过名称来调用每个函数,而无需使用句点表示法。但可能出现模块中的函数名与本项目中使用的名称相同。

最佳的做法是:妖魔只导入你需要使用的函数,要么导入整个模块并使用句点表示法。

函数编写指南

1:给函数,模块指定描述性名称,且只在其中使用小写字母和下划线

2:每个函数应包含简要地阐述其功能的注释,该注释莹紧跟在函数定义后面,并采用文档字符串格式。

3:给形参制定默认值,等号两边不要有空格:

def function_name(parameter_0,parameter_1='default value')

对于函数调用中的关键字实参,也可遵循这种约定:

function_name(value_0,parameter='value')

												

Python编程:从入门到实践—函数的更多相关文章

  1. Python编程从入门到实践笔记——函数

    Python编程从入门到实践笔记——函数 #coding=gbk #Python编程从入门到实践笔记——函数 #8.1定义函数 def 函数名(形参): # [缩进]注释+函数体 #1.向函数传递信息 ...

  2. Python编程从入门到实践笔记——用户输入和while循环

    Python编程从入门到实践笔记——用户输入和while循环 #coding=utf-8 #函数input()让程序暂停运行,等待用户输入一些文本.得到用户的输入以后将其存储在一个变量中,方便后续使用 ...

  3. Python编程-从入门到实践 Eric Matthes 著 袁国忠 译 - - 第二章 动手试一试

    因为第一章的动手试一试基本都是探索性的,所以直接进入第二章. # 2.2 动手试一试 # 2_1 简单消息: 将一条消息存储到变量中,再将其打印出来. message = 'python 编程从入门到 ...

  4. 《Python编程从入门到实践》_第十章_文件和异常

    读取整个文件 文件pi_digits.txt #文件pi_digits.txt 3.1415926535 8979323846 2643383279 下面的程序打开并读取整个文件,再将其内容显示到屏幕 ...

  5. #Python编程从入门到实践#第四章笔记

    #Python编程从入门到实践#第四章笔记   操作列表 ​​​1.遍历列表 使用for循环,遍历values列表 for value in values: print(value) 2.数字列表 使 ...

  6. Python编程从入门到实践

    Python编程从入门到实践1 起步2 变量和简单数据类型3 列表简介4 操作列表5 if语句6 字典7 用户输入和while循环8 函数9 类10 文件和异常11 测试代码12 武装飞船13 外星人 ...

  7. 《python编程从入门到实践》2.3字符串

    书籍<python编程从入门到实践> 2.3字符串 知识模块 print()函数,函数名称突出为蓝色,输出括号内的变量或者字符创. 变量名的命名:尽量小写字母加下划线并且具有良好的描述性, ...

  8. 《python编程从入门到实践》读书实践笔记(二)

    本文是<python编程从入门到实践>读书实践笔记11章的内容,主要包含测试,为体现测试的重要性,独立成文. 11 测试代码 写在前面的话,以下是我这些年开发中和测试相关的血泪史. 对于一 ...

  9. 《python编程从入门到实践》读书实践笔记(一)

    本文是<python编程从入门到实践>读书实践笔记1~10章的内容,主要包含安装.基础类型.函数.类.文件读写及异常的内容. 1 起步 1.1 搭建环境 1.1.1 Python 版本选择 ...

  10. Python编程从入门到实践笔记——异常和存储数据

    Python编程从入门到实践笔记——异常和存储数据 #coding=gbk #Python编程从入门到实践笔记——异常和存储数据 #10.3异常 #Python使用被称为异常的特殊对象来管理程序执行期 ...

随机推荐

  1. 偶遇com组件 .rc 文件 not found .tlb文件问题:

    好久木有弄com组件来,记忆已经模糊了,今天遇见一个编译问题,折腾了半天,mark一下: xxx_x64.rc(273): error RC2135: file not found: xxx.tlb ...

  2. Python 入门之 闭包

    Python 入门之 闭包 1.闭包 (1)在嵌套函数内使用(非本层变量)和非全局变量就是闭包 (2)_ closure _ 判断是不是闭包 def func(): a = 1 def foo(): ...

  3. 如何让css隐藏滚动条 兼容谷歌、火狐、IE等各个浏览器

    项目中,页面效果需要展示一个页面的移动端效果,使用的是一个苹果手机样式背景图,咋也没用过苹果,咋也不敢形容. 如下图所示: 在谷歌浏览器如图一滚动条顺利隐藏,但是火狐就如图二了,有了滚动条丑的一批. ...

  4. FPGA引脚锁定 注意err和高阻状态

    1.fpga没有用的的管脚一定要设置成高阻状态设置路径如下: Assignmen->Device->Device&Pin Option->Unused pins->As ...

  5. Tensorflow 2.0 学习资源

    我从换了新工作才开始学习使用Tensorflow,感觉实在太难用了,sess和graph对 新手很不友好,各种API混乱不堪,这些在tf2.0都有了重大改变,2.0大量使用keras的 api,初步使 ...

  6. EffectiveC++01-03

    导读 作者Scott Meyers在如何有效运用C++方面给出了55个具体的做法,大致分为两类: 一般性的设计策略,集中于"如何在不同的做法中选择一种完成任务" 选择inherit ...

  7. GUI学习之三十一—QLabel学习总结

    前面所有的控件都是归于输入控件的,下面我们要总结下展示控件的用法.首先要将的就是最常用的QLabel. 一.描述  标签控件(QLabel)提供了文本或图像显示的功能,可以用来显示 普通文本 数字 富 ...

  8. 浅析拯救小矮人的 nlogn 算法及其证明

    浅析拯救小矮人的 nlogn 算法及其证明 题型简介: 有 $ n $ 个人,第 $ i $ 个人身高 $ a_i $ 手长 $ b_i $ ,他们为了从一个高为 $ H $ 的洞中出去,决定搭人梯. ...

  9. OI比赛常数优化

    这是一篇玄学文章 一.编译优化 #pragma GCC optimize("O3") #pragma G++ optimize("O3") 预处理开O3优化 比 ...

  10. 2016.5.21【初中部 NOIP提高组】模拟赛A​ 总结

    这次比赛的题目看上去好像不难,但当开始仔细想的时候才发现,并没有那么简单. T1旅行:刚开始看到k<=4的时候还以为有题可以AC了,不过呢,还是毫无思路. T3Pty爬山:雨天的尾巴最近打了几道 ...