函数
函数是可以重复使用的代码块,定义一个函数很简单
>>> def Hello(): #定义函数名
print('Hello World') #函数执行内容
>>> Hello() #调用函数
Hello World
>>>
这是一个基本的函数,函数执行的过程是先定义,再调用,而且要注意的是,调用函数语句不能在定义函数语句的上面
Hello()
def Hello():
print('Hello World')
Traceback (most recent call last):
File "C:/Users/Deast/Desktop/test3.py", line 1, in <module>
Hello()
NameError: name 'Hello' is not defined
定义函数时,函数名后面的括号里可以添加一个或多个变量,相对应的,调用函数时的语句中括号里也要变化,这里将定义时的参数叫做形参,调用时的参数为实参,实参不仅可以是字符串,还可以是列表或字典等
def Hello(world): #形参
print(world)
Hello("HelloWorld") #实参
传递多个实参时,需要注意的是顺序问题,形参和实参的位置需要对应,否则可能闹笑话,甚至是出错
def sports(num,name):
print(num," "+name)
sports(1,"football") #1对应num,“football”对应name,如果这两实参写反的话,程序就出错了
像这种情况,你可以使用关键字实参来解决,顺序变了也没关系,虽然可能麻烦一点,但至少保险
def sports(num,name):
print(num," "+name)
sports(name="football",num=1)
另外还有可能出错的情况是实参和形参的数量不等,不过有的时候确实需要出现这种数量不对应的情况,比如实参有的时候有3个,有的时候有4个,这个可以形参先初始化的方法解决
def sports(num,name,kk=""): #这里是将形参kk初始化为空字符串,这样没有实参传递给它时就不会出错了,当然不一定是空字符串,也可以是其他
print(num," "+name)
sports(1,"football")
小练习:
'''
编写一个名为display_message()的函数,它打印一个句子,指出你在本
章学的是什么。调用这个函数,确认显示的消息正确无误
'''
def display_message():
print("函数")
display_message()
'''
编写一个名为favorite_book()的函数,其中包含一个名为title
的形参。这个函数打印一条消息,如One of my favorite books is Alice in Wonderland。
调用这个函数,并将一本图书的名称作为实参传递给它
'''
def favorite_book(title):
print("One of my favorite books is "+title)
favorite_book('Alice in Wonderland')
'''
编写一个名为make_shirt()的函数,它接受一个尺码以及要印到T 恤上
的字样。这个函数应打印一个句子,概要地说明T 恤的尺码和字样。
使用位置实参调用这个函数来制作一件T 恤;再使用关键字实参来调用这个函数
'''
def make_shirt(size,font):
print('size: '+size,'\nfont: '+font)
make_shirt('5','宋体')
make_shirt(font='楷体',size='10')
'''
修改函数make_shirt(),使其在默认情况下制作一件印有字样“I love
Python”的大号T 恤。调用这个函数来制作如下T 恤:一件印有默认字样的大号T 恤、
一件印有默认字样的中号T 恤和一件印有其他字样的T 恤(尺码无关紧要)
'''
def make_shirt(size='10',font='宋体',words="I love Python"):
print('size: '+size,'font: '+font,words)
make_shirt()
make_shirt('7')
make_shirt('楷体','10',"I love Python too")
'''
编写一个名为describe_city()的函数,它接受一座城市的名字以及该城
市所属的国家。这个函数应打印一个简单的句子,如Reykjavik is in Iceland。给用
于存储国家的形参指定默认值。为三座不同的城市调用这个函数,且其中至少有一座城
市不属于默认国家
'''
def describe_city(city,country='China'):
print(city+' is in '+country)
describe_city('Shanghai')
describe_city('Beijing')
describe_city('London','England')
前面我都是在函数里处理数据并输出,其实它也可以在处理数据后返回一个值或一组值,这就用到return语句了
>>> def test(name): #定义函数
words=('Hello,'+name)
return(words) #返回函数值
>>> print(test('gay')) #打印返回值
Hello,gay
>>>
返回值也可以是字典,也可以列表,看需求。函数本身是为重用,可以跟循环一起使用,使程序更加简洁
之前说了,传递的参数也可以是列表字典等,这里说下列表传递,其实也很简单,大同小异
def list_test(list1):
list2=[]
for num in list1:
list2.append(num)
return list2
print(list_test([3,5,1,2,8]))
另外关于列表传递的一个重要点是,如果在函数里对列表进行修改了,函数外的列表也是相应被修改了,就像之前学列表时的列表复制
def list_test(list1):
list2=[]
for num in list1:
list2.append(num)
list1.append(9)
# list1.sort()
return list2
list3=[2,7,1,3,8]
print(list_test(list3))
print(list3) #函数里list1变化了,函数外list3也跟着变化
有时候你可以不知道需要传递多少个实参,那可以创建一个空元组作为形参,空元组是用*来表示。
def list_test(num,*list1):
print (num)
for i in list1:
print(i)
list_test(5,'lsit1','list2','list3')
这个例子使用了位置实参和任意数量实参
将函数作为模块使用
前面说过了,函数的一个重要特性是可以重用,而将函数作为一个模块来使用就体现了这一点。模块的意思是将函数代码放在一个独立文件中,需要使用时再导入进来。导入需要使用到import。
首先,先定义一个函数,就用上面的例子
def list_test(num,*list1):
print (num)
for i in list1:
print(i)
将它保存为test3.py,然后在同一个目录下再创建一个Py文件,首先先导入文件test3,再调用函数,调用函数的方法是‘文件名.函数名’
import test3
test3.list_test(3,'54','good','yes')
如果你觉的每个都要输入模块名.函数名太麻烦,你可以导入特定的函数,功能一样,在需要调用函数多次时,可以这样使用,如果需要在同一个模块里导入多个函数,函数名可以用逗号隔开
from test3 import list_test
list_test(3,'54','good','yes')
你还可以在导入模块时给函数取个别名,防止和主程序中的名称有冲突,当然也可以给模块指定别名,因为有的模块名确实长
from module_name import function_name as fn
import module_name as mn
导入模块中所有的函数,直接导入模块就可以实现了,但调用函数时前面还是需要加个‘模块名.’,如果觉的麻烦,就可以使用
from function import *
这样就是调用模块里所以函数且可以直接调用函数,不用再加模块名了了了,但这样也有缺点,因为模块名里会有函数与你主程序里的名称一样,会导致错误。。。所以尽量不要用
小练习
无