python学习笔记——函数

  1. 定义函数
# 定义函数,函数名为greet_user,形参是username
def greet_user(username): 
'''文档字符串,描述函数是做什么的,用三引号括起'''
    print(f"Hello,{username}!")

greet_user('jesse')   #调用函数,jesse是实参
  1. 传递实参

调用函数时,Python 必须将函数调用中的每个实参都关联到函数定义中的一个形参。

位置实参:按照顺序将函数调用中的实参关联到定义中相应的形参。

def describe_pet(animal_type, pet_name):
    '''显示宠物信息'''
    print(f'I have a {animal_type}.')
    print(f"My {animal_type}'s name is {pet_name}.")

describe_pet('cat', 'white')

关键字实参:传递给函数的名称值对时,直接在实参中将名称和值关联起来。无需考虑函数调用中实参顺序。

def describe_pet(animal_type, pet_name):
    '''显示宠物信息'''
    print(f'I have a {animal_type}.')
    print(f"My {animal_type}'s name is {pet_name}.")
#以下两个函数调用是等效的
describe_pet(animal_type='cat', pet_name='white')
describe_pet(pet_name='white', animal_type='cat')

默认值:在编写函数时,可给每个形参指定默认值。则在调用函数时可以省略相应的实参。

#使用默认值时,必须先在形参列表中列出没有默认值的形参,再列出有默认值的形参。
def describe_pet(pet_name, animal_type='cat'):
    '''显示宠物信息'''
    print(f'I have a {animal_type}.')
    print(f"My {animal_type}'s name is {pet_name}.")

describe_pet('white')
  1. 返回值

使用return语句,可以将值返回到调用函数的代码行,可以返回一个或一组值。还可以返回任何类型的值,包括列表和字典等较复杂的数据结构

  1. 传递列表

将列表传递给函数后,函数就可对其进行修改。在函数中对这个列表所作的任何修改都是永久性的。

def print_models(unprinted_designs,completed_models):
    '''
    模拟打印每个设计,直到没有未打印的设计为止
    打印每个设计后,都将其移到列表completed_models中
    '''
    while unprinted_designes:
        current_design = unprinted_designs.pop()
        print(f"Printing model:{current_design}")
        completed_models.append(current_design)

def show_completed_models(completed_models):
    '''
    显示打印好的所有模型
    '''
    for completed_model in completed_models:
        print(completed_model)

unprinted_design = ['phone case', 'robot pendant', 'dodecahedron']
completed_models = []
print_models(unprinted_design, completed_models)
show_completed_models(completed_models)

每个函数都应只负责一项具体的工作。编写函数的时候,如果发现它执行的任务太多,请尝试将这些代码分别划分到两个函数中。

当有时需要禁止函数修改列表,可使用切片法创建列表的副本,向函数传递列表的副本,则函数所作的任何修改都只影响副本,而不会影响到原件

print_models(unprinted_design[:], completed_models)
  1. 传递任意数量的实参

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

#形参名*toppings中的星号让python 创建一个名为topping的空元祖,收集除位置实参和关键字实参外的参数
def make_pizza(size, *toppings):
    '''
    概述要制作的披萨
    '''
    print(f"\nMaking a {size}-inch pizza with the following toppings:")
    for topping intoppings:
        print(f"-{topping}")

make_piza(16, 'pepperoni')
make_pizza(12, 'mushrooms', 'green peppers', 'extra cheese')
  1. 传递任意数量的关键字实参
def build_profile(first, last, **user_info):
    '''
    创建一个字典,其中包含我们知道的有关客户的一切
    '''
    user_info['first_name'] = first
    user_info['last_name'] = last
    return user_info

user_profile = build_profile('albert', 'einstein', location='princeton',fild='physics')
print(user_profile)
  1. 将函数存储在模块中

导入模块

#导入pizza.py这个模块,让Python 打开文件pizza.py,并将其中的所有函数都复制到这个程序中。但人们看不到赋值的代码
import pizza
#调用pizza中的函数make_pizza(),调用函数时要指定被导入模块的名称和函数名,并用句点分隔
pizza.make_pizza(16, 'pepperoni')

导入特定函数

#导入模块中的特定函数
from module_name import function_0, function_1
#从pizza.py模块导入make_pizza这个特定函数
from pizza import make_pizza
#调用函数时,无需使用句点,只需指定其名称
make_pizza(16, 'pepperoni')

使用as给函数指定别名

from pizza import make_pizza as mp
#调用函数
mp(16, 'pepperoni')

使用as给模块指定别名

import pizza as p
#调用函数
p.make_pizza(16, 'pepperoni')

导入模块中的所有函数

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

在导入函数时,要么只导入需要使用的函数,要么导入整个模块并且使用句点表示法。这让代码更清晰,更容易阅读和理解。

  1. 函数编写指南

在编写函数时,应该函数指定描述性名称,且只在其中使用小写字母和下划线。
每个函数都应包含简要概述其功能的注释,采用文档字符串格式。
给形参指定默认值时,等号两边不要有空格。
对于函数调用中的关键字实参,等号两边也不要空格。
代码行的长度不超过79字符。如果函数定义超过79字符,可再函数定义中输入左括号后按回车键,并在下一行按两次tab键,从而将形参列表和只缩进1层的函数体区分开来。
如果程序或模块包好多个函数,那么可以使用两个空行将相邻的函数分开。
所有Import 语句都应该放在文件开头,除非在文件开头使用注释描述整个程序。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值