python之《函数和导入模块》

一,函数定义

1,关键字def定义函数

def greet_user():
    '''显示简单的问候语'''#文本字符串的注释
    print("hello!")
greet_user()
hello!

2,向函数传递信息

def greet_user(username):
    '''显示简单的问候语'''
    print(username.title()+','+"hello!")
greet_user('Jane')
Jane,hello!

其中,username是形参,Jane是实参。

二,传递实参

1,位置实参

基于实参顺序的关联方式叫做位置实参。

def ai_dou(name,contry):
    print("我有一个爱豆,他叫"+name+","+"来自"+contry)
    
ai_dou('杨洋','China')
我有一个爱豆,他叫杨洋,来自China

2,关键字实参

关键词实参是传递给函数的名称一值对。

使用关键字实参可以避免参数位置不对引发的逻辑错误。

def ai_dou(name,contry):
    print("我有一个爱豆,他叫"+name+","+"来自"+contry)
    
ai_dou(name='杨洋',contry='China')
我有一个爱豆,他叫杨洋,来自China

3,默认值

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

def ai_dou(name,contry='China'):
    print("我有一个爱豆,他叫"+name+","+"来自"+contry)
    
ai_dou(name='杨洋')
我有一个爱豆,他叫杨洋,来自China

注意:使用默认值时,在形参列表中,必须先列出没有默认值的形参,再列出有默认值的实参。

4,等效的函数调用

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

注意:使用哪一种调用方式无关紧要,只要函数调用能生成你希望的输出就行。使用对你来说最容易理解的调用方式即可。

5,避免实参错误

当你提供的实参多于或者少于函数完成其工作所需的信息时,将出现实参不匹配错误,会有提示。

三,传递列表

将函数传递列表很有用,列表中包含名字,数字或者更加复杂的对象(字典等)。将列表传递给函数后,函数就能直接访问其内容。

def ai_dou(names,contry='China'):
    for name in names:
        print("我有一个爱豆,他叫"+name.title()+","+"来自"+contry)
name=['杨洋','易烊千玺','李易峰']    
ai_dou(name)
我有一个爱豆,他叫杨洋,来自China
我有一个爱豆,他叫易烊千玺,来自China
我有一个爱豆,他叫李易峰,来自China

1,在函数中修改列表

将列表传递给函数后,函数可以对列表内容进行修改,并且这种修改是永久性的。

unprinted_designs=['iphone','robot','arduino']
completed_models=[]
while unprinted_designs:
    current_design = unprinted_designs.pop()
    print('正在打印:'+current_design)
    completed_models.append(current_design)
print("\n打印好的模型:")
for completed_model in completed_models:
    print(completed_model)
正在打印:arduino
正在打印:robot
正在打印:iphone

打印好的模型:
arduino
robot
iphone

2,禁止函数修改列表

用切片法传递列表的copy,避免原列表被修改。

unprinted_designs=['iphone','robot','arduino']
completed_models=[]
while unprinted_designs:
    current_design = unprinted_designs.pop()
    print('正在打印:'+current_design)
    completed_models.append(current_design)
print("\n打印好的模型:")
print(unprinted_designs[:],completed_models)
正在打印:arduino
正在打印:robot
正在打印:iphone

打印好的模型:
[] ['arduino', 'robot', 'iphone']

四,传递任意数量的实参

1,结合位置实参和任意数量实参

如果要让函数接受不同类型的实参,必须在函数定义中将接纳任意数量实参的形参放在最后。

def make_pizza(size,*toppings):
    '''概述要制作的沙拉'''
    print('\n制作一个'+str(size)+'千克的沙拉,有以下材料:')
    for topping in toppings:
        print('-'+topping)
make_pizza(16,'苹果')
make_pizza(20,'苹果','橘子','香蕉')
制作一个16千克的沙拉,有以下材料:
-苹果

制作一个20千克的沙拉,有以下材料:
-苹果
-橘子
-香蕉

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

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

五,将函数存储到模块中

将函数存储在被称为模块的独立文件中,再将模块导入到主程序中。

import语句允许在当前运行的程序中使用模块中的代码。

1,导入整个模块

pizza.py

def make_pizza(size,*toppings):
    '''概述要制作的沙拉'''
    print('\n制作一个'+str(size)+'千克的沙拉,有以下材料:')
    for topping in toppings:
        print('-'+topping)

making_pizza.py

import pizza
pizza.make_pizza(16,'苹果')
pizza.make_pizza(20,'苹果','橘子','香蕉')  

2,导入特定的函数

导入方法的语法

from module_name import function_name

用逗号分隔函数名,可根据需要从模块中导入任意数量的函数

from module_name import function_0,function_1,function_2

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

from module_name import function_name as fn

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

通过as给模块指定别名,简化代码

import module_name as mn

5,导入模块中的所有函数

可能会引发逻辑上的错误。

六,函数编写指南

1,给函数指定描述性名称,且只在其中使用小写字母和下划线。

2,每个函数后面要有简要的文字注释,给形参指定默认值时,等号两边不要有空格。

3,如果程序或模块包含多个函数,可以使用两个空行将相邻的函数分开,这样更容易知道前一个函数在哪个地方结束,下一个函数从什么地方开始。所有的import语句要放在文件开头,唯一例外的是,在文件开头使用了注释来描述整个程序。

 

你可能感兴趣的:(python从入门到精通,python)