7.1 python 中函数的定义

  python 中函数使用 def 定义: def greet_user():

7.2 传参的传递

  普通实参的传毒,可以与 C++ 相同,即按顺序传递。

7.2.1 关键字实参 -- 无需考虑传参顺序

  关键字实参是传递给函数的名称—值对。关键字实参让你无需考虑函数调用中的实参顺序,还清楚地指出了函数调用中各个值的用途。

def describe_pet(animal_type, pet_name):
print(animal_type,pet_name)
# ... ... # 关键字实参传参,以下两行代码等效
describe_pet(animal_type='hamster', pet_name='harry')
describe_pet(pet_name='harry', animal_type='hamster')

7.2.2 默认值

  同 C++。注意:使用默认值时,在形参列表中必须先列出没有默认值的形参,再列出有默认值的实参,这也与 C++ 相同。

def describe_pet(pet_name, animal_type='dog'):
print(pet_name,animal_type) describe_pet('www')

7.2.3 让参数变成可选择的

  可给能选择是否输入的实参指定一个默认值——空字符串,并在不输入这个参数值时不使用这个实参。

  例如函数是要输入姓氏,中间名,名称三个参数,但是有的人不存在中间名,这时就需要参数可选。

# 可选择是否输入的参数给予空白的默认值
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() musician = get_formatted_name('jimi', 'hendrix')
print(musician) musician = get_formatted_name('john', 'hooker', 'lee')
print(musician)

7.3 在函数中修改列表

  将列表作为参数传递给函数后,函数就可以对其进行修改,而这种修改对于列表来说是永久性的。

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)

7.3.1 禁止函数修改列表

  要禁止函数修改列表,可以将列表的副本(列表[:])传给函数,这样即使修改也是修改的列表的副本,对列表本身没有影响。

function_name(list_name[:])    # 要将列表的副本传递给函数

7.4 传递任意数量的实参

  形参形式形如 *形参名,即可接收任意数量的实参。即创建了一个元组,而任意数量的实参封装到了这个元组中。

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

# pizzas 接收多个参数
def make_pizza(custom,*pizzas):
"""概述要制作的比萨"""
print(custom,"buy these pizza:")
for pizza in pizzas:
print("- " + pizza)
print("\n") make_pizza('张三','pepperoni')
make_pizza('李四','mushrooms', 'green peppers', 'extra cheese')

7.5 将函数存储在模块中

将一整个模块导入,以模块名.函数名的形式调用函数。

pizza.py:

def make_pizza(custom,*pizzas):
"""概述要制作的比萨"""
print(custom,"buy these pizza:")
for pizza in pizzas:
print("- " + pizza)
print("\n")

main.py:

import pizza

pizza.make_pizza('张三','pepperoni')
pizza.make_pizza('李四','mushrooms', 'green peppers', 'extra cheese')

7.5.1 导入特定模块的特定函数

pizza.py:

def make_pizza(custom,*pizzas):
"""概述要制作的比萨"""
print(custom,"buy these pizza:")
for pizza in pizzas:
print("- " + pizza)
print("\n")

main.py:

from pizza import make_pizza    # 来自 pizza 模块的导入

make_pizza('张三','pepperoni')
make_pizza('李四','mushrooms', 'green peppers', 'extra cheese')

7.5.2 使用 as 给函数指定别名/给模块指定别名

  如果要导入的函数的名称可能与程序中现有的名称冲突,或者函数的名称太长,可使用 as 指定别名。

from pizza import make_pizza as mp
mp(16, 'pepperoni')
mp(12, 'mushrooms', 'green peppers', 'extra cheese')

  我们还可以给模块指定别名。

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

7.5.3 导入模块的全部函数

  from 模块名 import *

注意:最好不要采取这种方式,避免函数名相同带来不好的结果。  

7.函数的使用--《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编程从入门到实践》web应用程序,出现错误

    一开始是遇到了TemplateDoesNotExist的错误,上百度都是说改settings.py里面的TEMPLATE的DIRS, 但我改了还是出现问题, 我用的<python编程从入门到实践 ...

随机推荐

  1. SpringCloud学习 系列九、Ribbon

    系列导航 SpringCloud学习 系列一. 前言-为什么要学习微服务 SpringCloud学习 系列二. 简介 SpringCloud学习 系列三. 创建一个没有使用springCloud的服务 ...

  2. 《深入理解计算机系统》(CSAPP)读书笔记 —— 第七章 链接

    链接( Clinking)是将各种代码和数据片段收集并组合成为一个单一文件的过程,这个文件可被加载(复制)到内存并执行.链接可以执行于编译时( compile time),也就是在源代码被翻译成机器代 ...

  3. vue中我改变了data中的一个值,但现在视图上没有实时更新,请问我怎么拿到更新后的值?

    Vue在数据初始化的时候会对data,computed,watcher中的属性进行依赖收集,如果支持proxy,则直接使用proxy进行拦截,好处是可以深层次的进行拦截,如果不支持proxy,则使用o ...

  4. C# ,使用“^”运算符对数字加密

    原理:"异或"运算符"^", 用于比较两个二进制数的响应位.计算过程如果两个二进制数的相应位都为1或两个二进制数的相应位都为0,则返回0:如果两个二进制数的相应 ...

  5. C#设计模式02——原型模式的写法

    public class ProteType { private static ProteType _ProteType = new ProteType(); private ProteType() ...

  6. C# 加解密

    1.  Md5 /// <summary> /// 不可逆加密 /// 1 防止被篡改 /// 2 防止明文存储 /// 3 防止抵赖,数字签名 /// </summary> ...

  7. spring--Bean的作用域及应用场景

    这六种Spring Bean的作用域适用于不同的应用场景: Singleton: 在Spring IoC容器中仅存在一个Bean实例,Bean以单例方式存在.无论我们是否在配置文件中显式定义,所有的S ...

  8. .NET 5 开发WPF - 美食应用登录UI设计

    Demo演示: 你的时间宝贵,不想看啰嗦的文字,可直接拉到文末下载源码! 1. 新建项目 站长开发环境: VS 2019企业版 16.70 .NET 5 Preview 5 .NET 5 WPF 项目 ...

  9. Cortex-M3内核介绍

    目录 Cortex Vendor - ARM介绍 ARM主要提供指令集,需要授权 ARM使用的RSIC结构,功耗比较低 Cortex M3整体架构 核心是Processor Core - 包含寄存器和 ...

  10. 新建Maven工程没有src/main...目录?

    0.必看:详细的Maven项目介绍 1.问题 我新建的Maven项目的pom.xml为空,且无法被识别,同时项目目录没有src/main等等 2.解决 这里设置的JDK版本不对,我选用了JDK19 但 ...