用人话概况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.慎用星号导入所有函数的方式
————————————————————————————————————————————————————————————————
你的每一次点赞和关注,我都认真的当作是一次喜欢~~
更多文章请点这里