python学习8

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/D_east/article/details/79376135

函数

函数是可以重复使用的代码块,定义一个函数很简单

>>> 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 *

这样就是调用模块里所以函数且可以直接调用函数,不用再加模块名了了了,但这样也有缺点,因为模块名里会有函数与你主程序里的名称一样,会导致错误。。。所以尽量不要用

小练习




猜你喜欢

转载自blog.csdn.net/D_east/article/details/79376135