Python基础【函数与模块】

可口可乐的秘诀是什么?——只卖一罐可乐。

一、定义函数

函数,把 “用于完成某个基本功能多句代码”封装成一个代码块,从此,每当需要实现这个功能时,只需要用代码块的名字调用即可,不用反复去写或复制这些代码。这样的用于完成某个功能的代码块称为函数。

函数不但简化了程序,解放了程序员,还使程序易于维护。比如某天这个功能需要改变某个地方,如果没有函数就要处处改动。如果有函数只需要改函数即可。

下面是一个输出函数举例:

def greet_user():
    '''这个函数用来向用户打招呼'''
    print("Hello !")
greet_user()

如上,def 告诉python你要定义一个函数。greet_user()指明你这个函数名,不要忘了在后面加冒号。三个单引号是函数内加注释的方法。缩进后的所有语句都是这个函数的内容。最后一句是函数的调用 ,通过写函数名来使用函数。 

【注意】

1、作为一个优秀的程序员,必须要在紧跟函数名后的第一句注释出函数的功能或使用方法。

2、函数名称一定是描述性的名称,让人一看就知道函数的功能最好 。使用小写字母和下划线。

3、如果函数里有参数,给形参指定默认值时,等号两边不要有空格。(关于“形参”下面有讲解)

二、形参和实参

def greet_user(username):
    '''这个函数用来向用户打招呼'''
    print("Hello "+username)
greet_user('jack')

如上,在函数定义的时候,在括号内加入一个参数名,描述希望用户输入的值,这样的参数叫形式参数,简称“形参”,因为它只是一个形式上的定义,用来告诉用户这里需要一个输入,但并不是真正的输入。

最后一行在使用函数时传入的参数 “jack” 是函数实际使用了的,实实在在的参数,称为实际参数,简称“实参”。

1.位置形参

python函数调用时必须把每个实参都关联到一个形参上,最简单的关联就是位置对应,即根据位置顺序来关联。

例如:编写一个函数用来返回一个人的姓名和年龄,要求先有名子后有年龄。

def name_age(name,age):
    '''这个函数用来体会位置实参的使用方法'''
    print("The "+name+" is "+age+"years old. ")
name_age('xiaoming','27')

上例中如果把27和“ xiaoming”在调用时写反了就会输出“ The 27 is xiaoming years lod .”

2、关键字实参

关键字实参是传递给函数的“名称——值”对。直接在实参中将名称与其对应的值关联起来,无需按顺序。

def name_age(name,age):
    '''这个函数用来体会关键字实参的使用方法'''
    print("The "+name+" is "+age+"years old. ")
name_age(age=27,name='xiaoming')

虽然实参的顺序不同,但这个例子与上例结果是一样的。

3、为函数设置默认值

每个形参都可以设置默认值,调用函数时,当有对应实参就采用实参值,没有对应实参采用默认值。在有许多相同值的调用时非常方便。例如,需要输入姓名,年龄和国家,国家就可以设置默认值。

【注意】给函数设置默认参数时等号两边不要有空格。

def name_age_country(name,age,country="China"):
    '''这个函数用来体会为参数设置默认值'''
    print("The "+name+"is "+str(age)+" years old ,coming from "+country+". ")
name_age_country('小明',23)

3、让实参变成可选的

def get_formatted_name(first_name,last_name,middle_name=''):
	'''此函数用来说明如何把参数设置成可选的。'''
	if middle_name:
		full_name=first_name+' '+middle_name+' '+last_name
	else:
		full_name=first_name+' '+last_name
	return full_name

musician = get_formatted_name('jimi','hendrix')
print(musician)

musician=get_formatted_name('john','hooker','lee')
print(musician)

三、返回值

函数返回的值称为返回值。用return语句来表示返回内容。上例中,返回了一个full_name的字符串,你也可以返回一个数字等。函数可以返回任何类型的值,包括列表和字典等较复杂的数据结构。下面举例:

def student(name,num):
    '''本函数用来体会返回字典'''
	person={'student_name':name,'student_num':num}
	return person
print(student('小明',250))

四、把列表作为参数传递

参数可以是字符串也可以是一个列表。举例如下 :

def print_name(classes):
    '''体会将一个列表作为参数传入到函数中'''
    for name in classes:
        print(name)
classes=['小明','小红','小蓝']
print_name(classes)

还可以在函数中修改列表:

unfinished=["红烧肉",'辣子鸡','水晶凉皮','彩虹拼盘','糖醋里脊']
finished=[]

def cook(unfinished):
	'''这个函数把做菜从未做的列表转移到做完的列表'''
	for dish in unfinished:
		finished.append(dish)
		unfinished.remove(dish)

def print_order(order):
	'''打印做完的菜'''
	for dish in order:
		print(dish)

cook(unfinished)
print_order(finished)

如果不想修改原列表还可以传递原列表的副本,只需要在调用的时候传一个【:】即可,如下面最后两行。

unfinished=["红烧肉",'辣子鸡','水晶凉皮','彩虹拼盘','糖醋里脊']
finished=[]

def cook(unfinished):
	'''这个函数把做菜从未做的列表转移到做完的列表'''
	for dish in unfinished:
		finished.append(dish)
		unfinished.remove(dish)

def print_order(order):
	'''打印做完的菜'''
	for dish in order:
		print(dish)

cook(unfinished[:])
print_order(finished)

五、传递任意数量的实参

在形参前加一个星号,python会创建一个以形参名为名字的元组,将所有值都封装到这个元组中。

比如,顾客在点pizza时要求加许多配料,定义一个函数来打印这些配料:

def print_toppings(*toppings):
    '''体会传递任意数量的实参'''
	print(toppings)
print_toppings('haha')
print_toppings('mushrooms','extra cheese','dadada')

如果爱要让函数接受不同类型的实参,必须在函数定义中将任意数量实参放在最后再举一个结合使用了位置实参和任意数量实参的例子,要求输入比萨尺寸和配料:

def make_pizza(size,*toppings):
	'''结合使用位置实参和任意数量的实参'''
	print("Your pizza is "+size+" and the toppings include below:")
	for top in toppings:
		print("-"+top)
	print("\n")
make_pizza('small','dudu','wowowo','xixi')

make_pizza('medium','haha','dada','hiahia','yiyiyi','ooo','aaa')

2、传递任意数量的键值对实参

有时候不知道用户要传入什么信息,就用两个星号来接受任意数量的键值对。

def make_pizza(size,name,*toppings):
	'''结合使用位置实参和任意数量的实参'''
	print("Your pizza "+name+" is "+size+" and the toppings include below:")
	for top in toppings:
		print("-"+top)
	print("\n")
make_pizza('small','比萨A','dudu','wowowo','xixi')

make_pizza('medium','比萨B','haha','dada','hiahia','yiyiyi','ooo','aaa')

 六、将函数存储在模块中

通过将函数存储在独立的文件中,可隐藏程序代码的细节,将重点放在程序高层逻辑上。

模块,是扩展名为.py的文件,包含要导入到程序中的代码。下面来创建一个包含函数make_pizza 的模块。

def make_pizza(size,*toppings):
    '''概述要制作的比萨'''
    print("\nMaking a "+str(size)+
            "-inch pizza with the following toppings: ")
    for topping in toppings:
        print("-"+topping)

接下来,我们在Pizza.py所在的目录中创建另一个名为making_pizza.py的文件,这个文件导入刚创建的模块,再调用make_pizza()两次:

import pizza

pizza.make_pizza(16,'pepperoni')
pizza.make_pizza(21,'mushrooms','green peppers','estra cheeses')

【注意】在导入模块的时候是没有.py的。只写模块名即可。

还可以导入模块中的具体函数,这样就不用写模块名再调用了。如:

#注意,导入函数的时候是没有括号的。
from pizza import make_pizza
make_pizza(16,'pepperoni')

用as可以把导入的函数重新命名:

from pizza import make_pizza as doP
doP(16,'peppers')

用as给模块重新命名:

import pizza as pa
pa.make_pizza(16,'pppers')

导入模块中的所有函数:

from pizza import *
make_pizza(16,'peppers')

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

纸城

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值