用人话概况Python基础(五):函数

用人话概况Python基础(五):函数

函数的创建和使用

原创图

定义

函数的定义:在编程中,函数是带有特定名称的代码块,被用于处理具体的工作。

函数的基本简单结构包括关键字def、函数名、冒号、函数体中的代码(利用缩进),如下所示:

def  函数名():
	代码

1.不带参数的函数

def test_1():
	print('Hello World!')

test_1()

$打印结果
Hello World!

案例分析:
①创建了一个不带参数的函数【def test_1(): +换行’\n’+缩进’\t’+ print(‘Hello World!’)】
②执行test_1()时,便是调用该函数,此时将会执行该函数体中的工作
③执行函数体中的内容,打印Hello World!

2.带参数的函数

def test_2(username,age):
	print('My name is '+username+' and I am '+str(age)+' years old.')

test_2('laowang',18)

#程序编译执行结果
My name is laowang and I am 18 years old.

案例分析:
①【test_2(‘laowang’,18)】该括号中的参数,叫做实参
②【def test_2(username,age):】该圆括号中的参数,叫做形参
③函数test_2通过获得参数内容,以供函数内部使用

传递参数

传递参数

传递参数的方式有很多种,下面将依次介绍位置实参、关键字实参、列表,传递任意数量的实参(元组)、传递任意数量的关键字实参(字典)

位置实参

在调用含有参数的函数时,每个实参必须关联到函数定义中的一个形参,基于实参顺序传递的方式,称为位置实参

def customer(name,job):
	print(name.title() + " is a " + job)
customer('mark','manager')

#编译执行结果
Mark is a manager 

案例分析:
①创建了一个名为customer的函数,定义了形参 name和job
②调用了函数【customer(‘mark’,‘manager’)】,该句为函数按顺序地传递了两个实参mark和manager
③函数获取实参,并将实参的值按顺序的存储于形参中,并紧接着执行函数中的语句

注意:
1.使用位置实参的传递方式,一定要按顺序传递相应的信息,如果实参的传递顺序不同,会严重影响程序的执行结果

关键字实参

关键字实参其实就是在实参位置处,将形参名和值关联起来,相当于形参名-值对

关键字实参方式又有两种,一种是形参带默认值,另一种是形参不带默认值

1.形参不带默认值的关键字实参

def customer(name,job):
	print(name.title() + " is a " + job)
customer(job='manager',name='mark')

#编译执行结果
Mark is a manager 

案例分析:
①从案例中我们可以很容易理解’关键字实参’这种方式的用法,就是指定说明形参的值为多少
②通过指定说明形参的值,我们就可以不用考虑实参放置的位置

2.形参带默认值的关键字实参

def customer(name,job,color='black',lover=' '):
	if lover:
		print(name.title() + 'is not a single dog!')
	else:
		print(name.title() + " is a " + job)
		print(name.title() + ' has a ' + color + ' hair\n')
	
customer(job='manager',name='mark')
customer(job='manager',name='jery',color='yellow')

#位置实参和关键字实参的混合使用
customer('shark','manager',color='green')

#编译执行结果
Mark is a manager
Mark has a black hair

Jery is a manager
Jery has a yellow hair

#混合使用的编译执行结果
Shark is a manager
Shark has a green hair

案例分析:
①该案例相比上一个案例,形参处多了形参color和lover,并且在形参处分别赋予了值black和空格
②因此我们可以根据需求决定形参处的形参是否要赋予值,也可以像lover一样指定一个空格为默认值
③默认值为空字符串的形参,我们一般将其放置在最后
Python将非空字符串解读为True,所以如果我们给lover传值了的话将执行if语句中的代码,反之则是执行else语句中的代码
③在color的默认值设定后,如果我们需要改变color的值的话,只需在实参传递值时给予它一个新值即可

注意:
1.使用该方式时,形参名的拼写不要写错!!!【很重要】
2.给形参指定默认值时,等号两边不要有空格!!!【很重要】
3.函数调用中的关键字实参,等号两边也不要有空格!!!【很重要】
4.位置实参和关键字实参可以混合使用,只要注意它们的特点就行!!!【很重要】

列表

传递列表的传递方式简单易懂,不作过多说明,案例如下:

def greet_sb(names):
	for name in names:
		print('Hello '+name.title()+'!')
		
usernames = ['wangliu','xiaoming','lisa']
greet_sb(usernames)

#编译执行结果
Hello Wangliu!
Hello Xiaoming!
Hello Lisa!
传递任意数量的实参(元组)

当我们在预先不知道函数需要接受多少个实参的时候,我们可以使用该方法

def food(*lists):
	print(lists)
	for list in lists:
		print('This is '+list)

food('apple','banana','orange')
#编译执行结果
('apple', 'banana', 'orange')
This is apple
This is banana
This is orange

案例分析:
①形参名*lists中的星号是让Python创建一个名为lists的空元组
②创建了名为lists的空元组后,该元组将会把接收到的所有值封装其中
③元组lists获取并存储好信息后,将执行函数food中的代码,该案例简单介绍了两种输出使用方式

传递任意数量的关键字实参(字典)
def get_name(first,last,**username_info):
	sql= {}
	sql['first_name'] = first
	sql['last_name'] = last
	for key,value in username_info.items():
		sql[key] = value
	return sql

message = get_name('lin','xiaoxiao',age=20,hair='black')
print(message)

#编译执行结果
{'first_name': 'lin', 'last_name': 'xiaoxiao', 'age': 20, 'hair': 'black'}

案例分析:
①函数get_name定义了形参【first,last,** username_info】
其中形参【** username_info】中的两个星号是指让Python创建一个名为username_info的空字典,该字典用于存储一些相关信息
③函数get_name中创建了字典sql,并将形参的所有信息存储其中
④返回值sql
⑤message接收函数get_name返回的值
⑥打印message

函数的综合运用

需求1:
向用户请求获取他的姓名,并打印出来。
姓名分为姓和名两部分分别获取,并在函数get_name中将这两部分组合,并打印出来。(用户输入quit,表示输入完毕)

def get_name(first_name,last_name):
	full_name = first_name + last_name
	return full_name.title()

while True:
	print('\nPlease tell me your name and Input quit means exit')
	f_name = input('First name:')
	if f_name  == 'quit':
		break
		
	l_name = input('Last name:')
	if l_name  == 'quit':
		break
	
	name = get_name(f_name,l_name)
	print('Hello '+name+'!')

#编译执行结果

Please tell me your name and Input quit means exit
First name:lin
Last name:xiao
Hello Lin Xiao!

Please tell me your name and Input quit means exit
First name:huang
Last name:niu
Hello Huang Niu!

Please tell me your name and Input quit means exit
First name:quit

------------------
(program exited with code: 0)

请按任意键继续. . .

需求2:
需要将A公司的员工派去B公司实习,员工到达B公司后需进行签到,签到的员工数据将会传给A公司,利用函数和列表的知识实现这一需求

2.1在函数中修改列表

#coding=gbk

def return_sth(list_a,list_b):
	'''A公司所有员工都在B公司成功签到'''
	while list_a:
		temp = list_a.pop()
		list_b.append(temp)
		print(temp.title()+' has arrived!')
	
'''创建A公司员工名单'''
company_a = ['aron','jack','tom','lisa','jary']
company_b = []

check_in = return_sth(company_a,company_b)
print(check_in)
print(company_a)
print(company_b)

#编译执行结果
Jary has arrived!
Lisa has arrived!
Tom has arrived!
Jack has arrived!
Aron has arrived!
None
[]
['jary', 'lisa', 'tom', 'jack', 'aron']

2.2禁止函数修改列表

#coding=gbk
def return_sth(list_a,list_b):
	'''A公司所有员工都在B公司成功签到'''
	while list_a:
		temp = list_a.pop()
		list_b.append(temp)
		print(temp.title()+' has arrived!')
	

company_a = ['aron','jack','tom','lisa','jary']
company_b = []

check_in = return_sth(company_a[:],company_b)
print(check_in)
print(company_a)
print(company_b)

#编译执行结果
Jary has arrived!
Lisa has arrived!
Tom has arrived!
Jack has arrived!
Aron has arrived!
None
['aron', 'jack', 'tom', 'lisa', 'jary']
['jary', 'lisa', 'tom', 'jack', 'aron']

案例分析:
①当我们要保留列表原件的时候,我们可以使用切片的方法来传递列表信息,这样就可以保留列表原件了

需求3:
告诉用户这有水果种类:苹果、香蕉和梨

位置实参和任意数量实参(元组)的结合使用:

#coding=gbk
def get_sth(kind,*fruits):
	print('The kinds of '+kind+' here are:')
	for fruit in fruits:
		print(fruit)

get_sth('fruit','apples','bananas','pears')

#编译执行结果
The kinds of fruit here are:
apples
bananas
pears

在函数存储在模块中

我们在写代码时,往往希望各个程序能执行其特定的功能,此时便可以使用函数。除此之外,我们常希望主程序和各种代码块分离开来,而函数便可以实现。

将函数存储在独立文件中,则可把该文件称作为模块

方式一:

#文件名:test.py
#coding=gbk
def get_sth(kind,*fruits):
	print('The kinds of '+kind+' here are:')
	for fruit in fruits:
		print(fruit)
文件名:main.py
import test as t
t.get_sth('fruit','apples','bananas','pears')
#编译执行结果
The kinds of fruit here are:
apples
bananas
pears

案例分析:
1.文件test.py和main.py两个文件要放在同一个文件中
2.在main.py中导入函数get_sth 就用import+文件名便可以实现
3.我们在导入文件进来时,我们可以使用as方法来为导入进来的文件名设置一个别名,此处将文件名test取了一个别名t,通过这样的方式可以使代码更简洁
3.在成功导入后,在文件main.py中,使用t.get_sth(),即函数所在的文件名调用(点’.’)函数名的方式即可使用函数

方式二:

#文件名:test.py
#coding=gbk
def get_sth(kind,*fruits):
	print('The kinds of '+kind+' here are:')
	for fruit in fruits:
		print(fruit)
文件名:main.py
from test import get_sth

get_sth('fruit','apples','bananas','pears')
#编译执行结果
The kinds of fruit here are:
apples
bananas
pears

案例分析:
①该方式相比方式一,就是导入的方式不同,这种方式是显式的指明调用的是哪个特定函数
②对于指定说明导入的函数,我们无需像方式一一样用文件名调用函数名的方法使用函数
③我们这种方式,直接使用函数即可

方式三:

假设有一个文件test.py,该文件中有多个函数,我们想要导入这个文件中的所有函数的话,可以用星号*

#星号表示导入文件test.py中的所有函数
from test import *

函数的注意事项

1.在函数传参时,要注意各种传递参数的使用方式
2.参数名要确保没写错
3.我们需要导入某个函数时,要确保这几个文件同处于一个文件夹之中
4.慎用星号导入所有函数的方式

————————————————————————————————————————————————————————————————

你的每一次点赞和关注,我都认真的当作是一次喜欢~~

更多文章请点这里

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值