IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> Python Class 8:函数 -> 正文阅读

[Python知识库]Python Class 8:函数

目录

8.1 定义

1.传递信息

2.实参和形参

8.2 传递实参

1.位置实参

2.关键字实参

3.默认值

4.等效函数调用

5.避免实参错误

8.3 返回值

1.返回简单值

2.可选实参值

3.返回字典

4.函数与while循环

8.4 传递列表

1.修改列表

2.禁止修改列表

8.5 传递任意数量实参

1.结合使用位置与任意数量实参

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

8.6 将函数存储在模块中

1.导入模块

2.导入特定函数

3.使用as给函数指定别名

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

5.导入模块中所有函数

作业


8.1 定义

def greet_user():
	"""Simple message"""
	print('Hello')

greet_user()	

def为函数定义关键字,后跟函数名及括号,括号内可为空

""" """:文档字符串的注释

1.传递信息

def greet_user(username):
	"""Simple message"""
	print('Hello, '+username.title())

greet_user('james')	

可在函数名的括号内添加需要传递的信息

2.实参和形参

针对上面这个例程的定义中,变量username是形参,是函数完成工作所需的一项信息;而给定的james为实参,是调用函数时传递给函数的信息

8.2 传递实参

传递实参的方式有很多种,包括:要求顺序与形参相同的位置实参;关键字实参,由变量名和值组成;还可使用列表和字典。

1.位置实参

每个实参与形参顺序一一对应:

def describe_pet(animal_type,pet_name):
	print("\n I have a "+animal_type+" .")
	print("my pet's name is "+pet_name)
describe_pet('keji','pao')

#I have a keji
#my pet's name is pao

可以多次调用函数

def describe_pet(animal_type,pet_name):
	print("\n I have a "+animal_type+" .")
	print("my pet's name is "+pet_name)
	
describe_pet('dog','pao')
describe_pet('horse','niko')

2.关键字实参

def describe_pet(animal_type,pet_name):
	print("\n I have a "+animal_type+" .")
	print("my pet's name is "+pet_name)
	
describe_pet(animal_type='dog',pet_name='pao')

使用关键字实参不易混淆实参与形参,可以在函数引用中随意调换关键字实参的顺序

3.默认值

可以给形参指定默认值,只有当调用函数时使用了实参,才将指定实参值

def describe_pet(pet_name,animal_type='dog'):
	print("\n I have a "+animal_type+" .")
	print("my pet's name is "+pet_name)
	
describe_pet(pet_name='pao')
使用默认值时,在形参列表中必须先列出没有默认值的形参,再列出有默认值的实参。这让 Python 依然能够正确地解读位置实参。

4.等效函数调用

以下函数调用方式均等效

def describe_pet(pet_name,animal_type='dog'):
	print("\n I have a "+animal_type+" .")
	print("my pet's name is "+pet_name)
	
describe_pet('pao')
describe_pet(pet_name='pao')

describe_pet('harry','cat')
describe_pet(pet_name='harry',animal_type='cat')
describe_pet(animal_type='cat',pet_name='harry')

5.避免实参错误

若只有型参数与实参数不符时,会产生实参不匹配错误

def describe_pet(pet_name,animal_type='dog'):
	print("\n I have a "+animal_type+" .")
	print("my pet's name is "+pet_name)
	
describe_pet()

Traceback (most recent call last):
  File "D:\python_work\hello world2.py", line 5, in <module>
    describe_pet()
TypeError: describe_pet() missing 1 required positional argument: 'pet_name'

8.3 返回值

函数返回的值即返回值,可使用return语句将值返回至调用函数的代码行

1.返回简单值

def get_name(first_name,last_name):
	full_name=first_name+' '+last_name
	return full_name
people=get_name('lebron','james')
print(people)

调用返回值的函数时,需要提供变量

2.可选实参值

使用默认值让实参变成可选的

def get_name(first_name,middle_name,last_name):
	full_name=first_name+' '+middle_name+' '+ last_name
	return full_name
people=get_name('lebron','raymone','james')
print(people)

上述代码可以提供一个人的全名,但并非所有人都有中间命

def get_name(first_name,last_name,middle_name=' '):
	if middle_name:                                        #非空为True
		full_name=first_name+' '+middle_name+' '+ last_name
	else:
		full_name=first_name+' '+last_name
	return full_name
people=get_name('lebron','raymone','james')
print(people)
people=get_name('lebron','james')
print(people)

中间名此时变成了可选的

3.返回字典

函数可返回任意类型的值,包括列表与字典

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

people=build_person('lebron','james')
print(people)

4.函数与while循环

def get_name(first_name,last_name):
	full_name=first_name+' '+last_name
	return full_name
while True:
	f_name=input("first name: ")
	l_name=input("last name: ")
	people=get_name(f_name,l_name)
	print(people)

8.4 传递列表

def greet_users(names):
	for name in names:
		msg="hello, "+name
		print(msg)
usernames=['james','curry','kobe']
greet_users(usernames)

1.修改列表

未使用函数修改列表时

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)

使用函数后

def print_models(unprinted_designs,completed_models):
	while unprinted_designs:
		current_design = unprinted_designs.pop()
		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)

2.禁止修改列表

使用切片法,保留原列表

print_models(unprinted_designs[:],completed_models )

8.5 传递任意数量实参

def make_pizza(*toppings):
	print(toppings)
make_pizza('tomato')
make_pizza('mushroom','cheese')

*使创建一个空元组。将接收到的值存入该元组中

1.结合使用位置与任意数量实参

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

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

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('a','b',location='london',field='math')
print(user_profile)

**创建一空字典,将接收到的键-值对存入字典中。

8.6 将函数存储在模块中

可将函数存储在名为模块的文件中

1.导入模块

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

将以上函数导入

import pizza
pizza.make_pizza(16,'tomato')
pizza.make_pizza(18,'mushroom','cheese')

2.导入特定函数

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

3.使用as给函数指定别名

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

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

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

5.导入模块中所有函数

使用星号( * )运算符可让 Python 导入模块中的所有函数
from pizza import * 
make_pizza(16, 'pepperoni') 
make_pizza(12, 'mushrooms', 'green peppers', 'extra cheese')

作业

1.编写一个名为display_message() 的函数,它打印一个句子,指出你在本章学的是什么。调用这个函数,确认显示的消息正确无误。

def display_message():
	print("In this chapter I learned about functions")

display_message()

2.编写一个名为favorite_book() 的函数,其中包含一个名为title 的形参。这个函数打印一条消息?。调用这个函数,并将一本图书的名称作为实参传递给它。

def favorite_book(title):
	print("one of my favorite books is "+title)
favorite_book('older and sea')

3.编写一个名为make_shirt() 的函数,它接受一个尺码以及要印到T恤上的字样。这个函数应打印一个句子,概要地说明T恤的尺码和字样。使用位置实参调用这个函数来制作一件T恤;再使用关键字实参来调用这个函数。

def make_shirt(size,word):
	print("this shirt size is "+size+" inch.and printed with the words:"+word)

make_shirt('6','just do it')
make_shirt(word='just do it',size='6')

4.修改函数make_shirt() ,使其在默认情况下制作一件印有字样“I love Python”的大号T恤。调用这个函数来制作如下T恤:一件印有默认字样的大号T恤、一件印有默认字样的中号T恤和一件印有其他字样的T恤(尺码无关紧要)。

def make_shirt(size,word='I love python'):
	print("this shirt size is "+size+".and printed with the words:"+word)

make_shirt('big size')
make_shirt('middle size')
make_shirt(word='just do it',size='middle size')

5.编写一个名为describe_city() 的函数,它接受一座城市的名字以及该城市所属的国家。这个函数应打印一个简单的句子。给用于存储国家的形参指定默认值。为三座不同的城市调用这个函数,且其中至少有一座城市不属于默认国家。

def describe_city(name,country='china'):
	print(name+" is in "+country)
describe_city('beijing')
describe_city('shanghai')
describe_city('longdon','U.K')

6.编写一个名为city_country() 的函数,它接受城市的名称及其所属的国家。

def city_country(name,country):
	name_country=name+" , "+country
	print(name_country)
city_country('santiago','chile')

7.编写一个名为make_album() 的函数,它创建一个描述音乐专辑的字典。这个函数应接受歌手的名字和专辑名,并返回一个包含这两项信息的字典。使用这个函数创建三个表示不同专辑的字典,并打印每个返回的值,以核实字典正确地存储了专辑的信息。给函数make_album() 添加一个可选形参,以便能够存储专辑包含的歌曲数。如果调用这个函数时指定了歌曲数,就将这个值添加到表示专辑的字典中。调用这个函数,并至少在一次调用中指定专辑包含的歌曲数。

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-09-01 11:52:42  更:2021-09-01 11:54:17 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/26 23:10:45-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计