Python 函数简介与操作

1、定义函数

下面是一个简单的函数:

def greeter_user():
    print('Hello World!')
greeter_user()

关键字def告诉Python要定义的是一个函数,定义以冒号结尾。

1>向函数传递信息

def greeter_user(username):
    print('Hello, ' + username.title() + '!')
greeter_user('jessi')

2>实参和形参

在前面定义的函数greeter_user()中,变量username是一个形参——函数完成其工作所需的一项信息。

在代码greeter_user(‘jessi’)中,值‘jessi’是一个实参——调用函数时传递给函数的信息。

2、传递实参

向函数传递实参的方式有很多,可使用位置实参(要求实参的顺序与形参的顺序相同)、关键字实参(其中每个实参都由变量名和值组成),还可以使用列表和字典。

1>位置实参

在调用函数时,Python将函数调用中的每个实参都关联到函数定义中的一个形参。为此,最简单的关联方式是基于实参的顺序。

扫描二维码关注公众号,回复: 11391067 查看本文章
def describe_pet(animal_type, pet_name):
    print('\nI have a ' + animal_type + '.')
    print('My '+ animal_type + "'s name is " + pet_name.title() + '.')
describe_pet('cat','Lili')
describe_pet('dog','John')

可根据需要多次调用函数;使用位置实参时,实参顺序很重要。

2>关键字实参

关键字实参是传递给函数的名称-值对。关键字实参顺序无关紧要,但务必准确地指定函数定义中的参数名。

describe_pet(animal_type = 'cat',pet_name = 'harry')
describe_pet(pet_name = 'Ann',animal_type = 'hamster')

3>默认值

编写函数时,可给每个参数指定默认值。在调用函数中给形参提供了实参时,Python将使用指定的实参值;否则将使用形参的默认值。

4>等效的函数调用

由于可混合使用位置实参、关键字实参和默认值,通常有多种等效的函数调用方式。

 def describe_pet(pet_name, animal_type = 'dog'):
#一条名为Whillie的小狗
describe_pet('Whillie')
describe_pet(pet_name='Whillie')

#一只名为Harry的仓鼠
describe_pet('harry','hamster')
describe_pet(pet_name='harry', animal_type='hamster')
describe_pet(animal_type='hamster',pet_name='harry')

3、返回值

使用return 语句将值返回到调用函数的代码行。

1>返回简单值

def get_formatted_name(first_name, last_name):
    full_name= first_name+ ' ' + last_name
    return full_name.title()
musician = get_formatted_name('jimi','hendrix')
print(musician)

2>让实参变成可选的

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.title()
musician = get_formatted_name('jimi','hendrix')
print(musician)
musician = get_formatted_name('john','hooker','lee')
print(musician)

中间名是可选的,因此在函数定义中最后列出该形参,并将其默认值设置为空字符串。Python将非空字符串解读为True,因此如果函数中提供了中间名,if middle_name将为True。

3>返回字典

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

def build_person(first_name,last_name,age=''):
    person = {'first': first_name,'last': last_name}
    if age:
        person['age'] = age
    return person
musician = build_person('jimi', 'hendrix',age= 27)
print(musician)

 4>结合使用函数和while循环

def get_formatted_name(first_name,last_name):
    full_name = first_name + ' ' + last_name
    return full_name.title()
while True:
    print('\nPlease tell me your name: ')
    print("(enter 'quit' at any time to quit)")
    f_name = input('first name: ')
    if f_name == 'quit':
        break
    l_name = input('last name: ')
    if l_name == 'quit':
        break
    formatted_name = get_formatted_name(f_name,l_name)
    print('\nHello, '+ formatted_name + '!')

4、传递列表

1>在函数中修改列表

将列表传递给函数后,函数就可对其进行修改,并且所做任何修改是永久性的,这让你能够高效的处理大量的数据。

重新组织代码,编写两个函数,每一个都做一件具体工作:

有时候需要保留原来未打印的列表以供备案,但如果直接pop()列表,原来的列表就变成了空。为解决这个问题,可向函数传递列表的副本而不是原件:

print_models(unprinted_designs[:],completed_models)

5、传递任意数量的实参

有时候,你预先不知道函数需要多少个实参,Python允许函数从调用语句中收集任意数量的实参。

例如,下面是一个制作披萨的函数,它需要接受很多配料,但你无法预料顾客要多少种配料。

*toppings中的星号让Python创建一个名为toppings的空元祖,并将收到的所有值都封装到这个元祖中。

1>结合使用位置实参和任意数量实参

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

例如,前面的函数中加一个表示披萨尺寸的实参,必须将形参放在形参*toppings的前面。

2>使用任意数量的关键字实参

有时候,需要接收任意数量的实参,但预先不知道传递给函数的是什么样的信息。这种情况下,可将函数编写成能够接受任意数量的键-值对——调用语句提供多少就接受多少。

例如,创建用户简介:你知道将收到有关用户的信息,但不确定是什么样的信息。

形参**user_info中的两个星号让Python创建一个名为user_info的空字典,并将收到的所有名称-值对都封装到这个字典中。可以像访问其他字典那样访问user_info中的名称-值对。

6、将函数存储在模块中

函数的优点之一是,使用它们可将代码块与主程序分离。你还可以更进一步,将函数存储在被称为模块的独立文件中,再将模块导入到主程序中。import语句允许在当前运行的程序文件中使用模块中的代码。

1>导入整个模块

要让函数可导入首先创建模块,模块是扩展名.py的文件,包含要导入到程序中的代码。

2>导入特定的函数

from module_name import function_name

from module_name import function_0, function_1, function_2


from pizza import make_pizza 

make_pizza(16,'pepperoni')
make_pizza(12,'mushroom','green peppers','extra cheese')

3>使用as 给函数指定别名

from module_name import function_name as fn

from pizza import make_pizza as mp

mp(16, 'pepperoni')
mp(12, 'mushroom','green peppers','extra cheese')

4>使用as 给模块指定别名

import module_name as mn

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

5>导入模块中所有函数

from pizza import *

make_pizza(16,'peppperoni')
make_pizza(12,'mushrooms', 'green peppers', 'extra cheese')

使用并非自己编写的大型模块时,最好不要用这种导入方法:如遇到名称相同的函数或变量,会覆盖函数。

 7、函数编写规范

给形参指定默认值时,等号两边不要有空格。

函数中调用关键字实参,等号两边不要有空格。

如果形参很多,可在函数定义中输入左括号后按回车,并在下一行按两次Tab。

import语句应放在文件开头。

猜你喜欢

转载自blog.csdn.net/Snippers/article/details/82114502