自学Python:第8篇——函数

定义函数 def
eg:
def greet():
    print("hello!")
greet()


实参和形参的用法无需多言

关键字实参
关键字实参是传递给函数的名称-值对,让你无需考虑函数调用中的实参顺序,
还清楚地指出了函数调用中各个值的用途
eg:以下两个函数调用是等效的
fun(age=30,name='messi')
fun(name='messi',age=30)



默认值
编写函数时,可以给每个形参指定默认值
在调用函数时,如果给形参提供了实参,则不用默认值;否则,将使用默认值
def people(name,age=20):
    print(name,age)
people('kaka',35)

kaka 35


def people(name,age=20):
    print(name,age)
people('kaka')

kaka 20




返回值
def people(name,age=20):
    x=name+","+str(age)
    return x
m=people('liu')
print(m)

liu,20



让实参变成可选择的(可以不输入实参):
def name(x1,x3,x2=''):
    if x2:
        m=x1+" "+x2+" "+x3
    else:
        m=x1+" "+x3
    return m
x=name('fer','tor')
print(x)


注意:可选择的实参要放在最后一个参数,否则会报错

结果fer tor
若x=name('fer','sanz','tor')
则结果为x=name('fer','sanz','tor')


返回字典
函数可以返回任何类型的值,包括列表和字典等较复杂的数据结构

def people(x1,x2):
    x={'name':x1,'age':x2}
    return x
    
m=people('toni',18)
print(m)

>>>{'age': 18, 'name': 'toni'}





传递列表
应用一:在函数中修改列表(再返回一个列表)
应用二:禁止函数修改列表


修改列表-例子:
def new(a,new_list):
    while a:
        x=a.pop()
        new_list.append(x)
    return new_list
    
def show(a):
    for x in a:
        print(x)

a=[1,2,3,4,5]
b=[0]
new(a,b)
show(b)

0
5
4
3
2
1



禁止函数修改列表:
调用函数后,也许列表会变成空的,即原来的列表没有了
为解决这个问题,可以向函数传递列表的副本而不是原件,这样的话
函数所做的任何修改都只影响副本,而丝毫不影响原件
要将列表的副本传递给函数,使用切片表示法:
fun(list[:])

eg:
def new(a,new_list):
    while a:
        x=a.pop()
        new_list.append(x)
    return new_list
    
def show(a):
    for x in a:
        print(x)

a=[1,2,3,4,5]
b=[0]
new(a[:],b)   #就在这里,使用切片表示法,传入一个a的副本
show(a)

>>>
0
5
4
3
2
1


可见,a并没有被改变


传递任意数量的实参:
有时候,你预先不知道函数需要接收多少个实参,
好在python允许函数从调用语句中收集任意数量的实参

def make_pizza(*toppings):
    print(toppings)
make_pizza('a','b')

>>>('a', 'b')



python将实参封装到一个元组(tuple)中

def make_pizza(*toppings):
    for x in toppings:
        print(x)
make_pizza('a','b','c')
>>>
a
b
c




结合使用位置参数和任意数量实参
如果要让函数接收不同类型的实参,必须在函数定义中将接纳任意数量实参的形参放在最后
python先匹配位置参数和关键字参数,再将余下的实参都收集到最后一个形参中

def make_pizza(size,*toppings):
    print("To make a "+size+" pizza")
    print("you need these:")
    for x in toppings:
        print(x)
        
make_pizza('large','a','b')
>>>
To make a large pizza
you need these:
a
b



使用任意数量的关键字实参:
输入一些数据,返回一个字典,故属于关键字实参
eg:
def build_people(x1,x2,**x3):
    pro={}
    pro['first']=x1
    pro['second']=x2
    for k,v in x3.items():
        pro[k]=v
    return pro
x=build_people('Albert','Einstein',location='USA',field='physics') #lucation是key,USA是value
print(x)

>>>
{'second': 'Einstein', 'location': 'USA', 'first': 'Albert', 'field': 'physics'}





将函数存储在模块中:
进阶操作:将函数存储在模块这种独立文件中,再将模块导入到主程序中
import语句允许在当前运行的程序文件中使用模块中的代码
import语句应放在程序开头

模块的扩展名是.py的文件
pizza.py (作为一个模块):
def build_people(x1,x2,**x3):
    pro={}
    pro['first']=x1
    pro['second']=x2
    for k,v in x3.items():
        pro[k]=v
    return pro



run.py (在这里调用模块的函数):
import pizza
x=pizza.build_people('Albert','Einstein',location='USA',field='physics')   #调用时注明模块
print(x)



还可以这样,导入模块中的特定函数:
from pizza import build_people (注意:函数没有加括号噢)
后面调用就无需说明函数来源于哪个模块了


使用as给函数指定别名(不常用):
from hello import build_people as bd
bd(......)

导入模块中的所有函数
from pizza import *
使用并非自己写的大型模块时,最好不要使用这种导入方法
如果有重名函数,可能导致意想不到的结果

































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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值