从函数中修改列表

一家为用户提交的设计制作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. 最少多少人说谎(dp)

    https://ac.nowcoder.com/acm/contest/1168/H 题意:n个学生,邓志聪想知道这些学生的考试情况,于是一个一个叫这些学生叫去办公室问他们,但是有些学生并没有讲真话, ...

  2. 洛谷 P1484 种树(优先队列,贪心,链表)

    传送门 解题思路 第一眼的贪心策略:每次都选最大的. 但是——不正确! 因为选了第i个树,第i-1和i-1棵树就不能选了.所以,要有一个反悔操作. 选了第i个后,我们就把a[i]的值更新为a[l[i] ...

  3. Redis的配置与数据类型

    redis window系统的redis是微软团队根据官方的linux版本高仿的 官方原版: https://redis.io/ 中文官网:http://www.redis.cn 1. redis下载 ...

  4. bootstrap中的横的列

    col-md-6都是可以嵌套的,所以12列都是虚拟的 所以bootstrap是怎么完成的?都是通过绝对的像素值吗?还是自动计算出了本区域的像素数,然后设置的? 看样子应该是后者,所以整个bootstr ...

  5. Android remote gdb

    On Android phone adb push ~/utils/android-ndk-r12b/prebuilt/android-arm64/gdbserver/gdbserver /data/ ...

  6. 华为云搭建windows+wordpress+xampp

    1.如何将本地文件上传至华为云ECS云服务器(Windows系统) 1.1 在本地电脑上,快捷键“WIN+R"打开“运行”中输入“mstsc”,点击确定 1.2  在“远程桌面连接”框点击“ ...

  7. PAT Advanced 1011 World Cup Betting (20 分)

    With the 2010 FIFA World Cup running, football fans the world over were becoming increasingly excite ...

  8. 神经风格转换Neural Style Transfer a review

    原文:http://mp.weixin.qq.com/s/t_jknoYuyAM9fu6CI8OdNw 作者:Yongcheng Jing 等 机器之心编译 风格迁移是近来人工智能领域内的一个热门研究 ...

  9. 生成对抗网络资源 Adversarial Nets Papers

    来源:https://github.com/zhangqianhui/AdversarialNetsPapers AdversarialNetsPapers The classical Papers ...

  10. 【学习】016 MySQL数据库优化

    MySQL如何优化 表的设计合理化(符合3NF) 添加适当索引(index) [四种: 普通索引.主键索引.唯一索引unique.全文索引] SQL语句优化 分表技术(水平分割.垂直分割) 读写[写: ...