python函数

函数

不管是在C语言还是在python中关于函数这一部分的学习都少不了实参和形参这两个概念。而这两个概念也都是最容易搞混的。如果在学习C语言时就把这两个问题搞清楚了就会发现其实python中的函数和C语言中的函数使用方法还是差不多的。

实参和形参

在定义一个函数时要使用一个关键字 def来告诉别人你要定义一个函数。注意在最后要加上一个冒号。

def user(name):
    print("hello,"+name.title())
user('snally')

在函数user() 的定义中,变量name 是一个形参 ——函数完成其工作所需的一项信息。在代码user(‘snally’) 中,值’snally’ 是一个实参 。实参是 调用函数时传递给函数的信息。我们调用函数时,将要让函数使用的信息放在括号内。
当搞清楚实参和形参时,再调用函数时可以根据你定义的形参个数来调用相应的实参个数。在这里可以使用位置实参,在使用位置实参时实参顺序要和形参对应,不然结果可能会和你想要的不同。如果不想要考虑顺序我们可以使用关键字实参。例如定义一个函数:**def describe_pet(animal_type, pet_name): **再调用时可以这样写:describe_pet(pet_name=‘harry’, animal_type=‘hamster’)。编写函数时,可给每个形参指定默认值 。在调用函数中给形参提供了实参时,Python将使用指定的实参值;否则,将使用形参的默认值。因此,给形参指定默认值后,可在函数 调用中省略相应的实参。列如:

def describe_pet(pet_name, animal_type='dog'):
  #  """显示宠物的信息"""
    print("\nI have a " + animal_type + ".")
    print("My " + animal_type + "'s name is " + pet_name.title() + ".")
describe_pet('willie')

不给关键字时会将实参值默认给第一个形参,所以一般会将赋值的形参写在后面。
函数中也会有返回值。

def people(xing,ming):
    full_name=xing+' '+ming
    return full_name.title()
name=people('daek','tom')
print(name)

此时结果:Daek Tom
关于上面的函数调用都是和C语言差不多,python中函数调用会和列表字典等联系起来,包括与C语言不同的一些使用方法。

返回字典
def person(xing,ming,age=''):
    per={'first':xing,'last':ming}
    if age:
        per['age']=age
    return per
people=person('Sllay','tonm',13)
print(people)

结果:{‘first’: ‘Sllay’, ‘last’: ‘tonm’, ‘age’: 13}

传递列表
def greet_users(names):
    for name in names:
        msg = "Hello, " + name.title() + "!"
        print(msg)
usernames = ['hannah', 'ty', 'margot']
greet_users(usernames)

除此以外我们还可以使用函数来修改列表,而使用切片复制的方法可以在使用原列表中的元素的同时不会更改原列表。

def greet_users(names,pers):
    while names:
        per=names.pop()
        print(per)
        pers.append(per)
usernames = ['hannah', 'ty', 'margot']
pers=[]
greet_users(usernames[:],pers)
print(usernames)

结果:
margot
ty
hannah
[‘hannah’, ‘ty’, ‘margot’]

传递任意数量实参

使用一个“*”可以让我们传递任意数量的实参。

def make_pizza(*toppings):
    #"""打印顾客点的所有配料"""
    print(toppings)
make_pizza('pepperoni')
make_pizza('mushrooms', 'green peppers', 'extra cheese')

结果:(‘pepperoni’,)
(‘mushrooms’, ‘green peppers’, ‘extra cheese’)
使用两个“**”可以让我们创建一个空字典。

def build_profile(first, last, **user_info):
    profile = {}
    #"""创建一个字典,其中包含我们知道的有关用户的一切"""
    profile['first_name'] = first
    profile['last_name'] = last
    for key, value in user_info.items():
        profile[key] = value
    return profile
user_profile = build_profile('albert', 'einstein',location='princeton',field='physics')
print(user_profile)
结果:
{'first_name': 'albert', 'last_name': 'einstein', 'location': 'princeton'}

将函数存储在模块中

模块是扩展名为.py的文件,包含要导入到程序中的代码。
我们可以先建一个文件名pizza.py的文件,里面包含的是已经定义好的函数,然后在另一个文件中使用这个函数。开头必须是import 加上刚刚建好的模块pizza。
pizza.py文件

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

另一个文件

import pizza
pizza.make_pizza(16, 'pepperoni')
pizza.make_pizza(12, 'mushrooms', 'green peppers', 'extra cheese')

在这个文件中便可以运行了。(这里导入的是整个模块,包括每个函数,可以使用例如pizza.make_pizza()的形式调用其中的函数)
我们也可以使用另一种方法来导入特定的函数。

from pizza import make_pizza
make_pizza(16, 'pepperoni')
make_pizza(12, 'mushrooms', 'green peppers', 'extra cheese')

通过用逗号分隔函数名,可根据需要从模块中导入任意数量的函数:
from pizza import make_pizza1,make_pizza2,make_pizza3

使用as给函数指定别名

如果觉着函数名太麻烦可以使用as来起个别名形式如下:
from pizza import make_pizza as mp
mp(16, ‘pepperoni’)
mp(12, ‘mushrooms’, ‘green peppers’, ‘extra cheese’
as也可以给模块起别名。
import pizza as p
p.make_pizza(16, ‘pepperoni’)
p.make_pizza(12, ‘mushrooms’, ‘green peppers’, ‘extra cheese’)
使用星号(* )运算符可让Python导入模块中的所有函数:
from pizza import *
make_pizza(16, ‘pepperoni’)
make_pizza(12, ‘mushrooms’, ‘green peppers’, ‘extra cheese’)
这样可以不使用句点表示法但当做大型程序时最好不要使用这种方法。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值