一、定义函数
下面是一个打印问候语的简单函数,名为greet_user()1、向函数传递信息
通过在这里添加username ,就可让函数接受你给username 指定的任何值。现在,这个函数要求你调用它时给username 指定一个值。
二、传递实参
1、位置实参
Python必须将函数调用中的每个实参都关联到函数定义中的一个形参。为此,最简单的关联方式是基于实参的顺序。这种关联方式被称为位置实参
2、关键字实参
关键字实参 是传递给函数的名称—值对。你直接在实参中将名称和值关联起来了,因此向函数传递实参时不会混淆 关键字实参让你无需考虑函数调用中的实参顺序,还清楚地指出了函数调用中各个值的用途
3、默认值
编写函数时,可给每个形参指定默认值 。在调用函数中给形参提供了实参时,Python将使用指定的实参值;否则,将使用形参的默认值。 因此,给形参指定默认值后,可在函数调用中省略相应的实参。使用默认值可简化函数调用,还可清楚地指出函数的典型用法 使用默认值时,在形参列表中必须先列出没有默认值的形参,再列出有默认值的实参
三、返回值
1、返回简单值
下面来看一个函数,它接受名和姓并返回整洁的姓名
2、让实参变成可选的
3、返回字典
四、传递列表
1、在函数中修改列表
将列表传递给函数后,函数就可对其进行修改。在函数中对这个列表所做的任何修改都是永久性的,这让你能够高效地处理大量的数据
2、禁止函数修改列表
有时候,需要禁止函数修改列表。例如,假设像前一个示例那样,你有一个未打印的设计列表,并编写了一个将这些设计移到打印好的模型列 表中的函数。你可能会做出这样的决定:即便打印所有设计后,也要保留原来的未打印的设计列表,以供备案。但由于你将所有的设计都移出 了unprinted_designs ,这个列表变成了空的,原来的列表没有了。为解决这个问题,可向函数传递列表的副本而不是原件;这样函数所做 的任何修改都只影响副本,而丝毫不影响原件。 要将列表的副本传递给函数,可以像下面这样做 function_name(list_name[:])
五、传递任意数量的实参
形参名*toppings 中的星号让Python创建一个名为toppings 的空元组,并将收到的所有值都封装到这个元组中
1、结合使用位置实参和任意数量实参
如果要让函数接受不同类型的实参,必须在函数定义中将接纳任意数量 实参的形参放在最后。Python先匹配位置实参和关键字实参,再将余下 的实参都收集到最后一个形参中
2、使用任意数量的关键字实参
有时候,需要接受任意数量的实参,但预先不知道传递给函数的会是什么样的信息。在这种情况下,可将函数编写成能够接受任意数量的键— 值对——调用语句提供了多少就接受多少。一个这样的示例是创建用户简介:你知道你将收到有关用户的信息,但不确定会是什么样的信息。 在下面的示例中,函数build_profile() 接受名和姓,同时还接受任意数量的关键字实参。形参**user_info 中的两个星号让Python创建一个名为user_info 的空字典,并将收到的所有名称—值对都封装到这个字典中
六、将函数存储在模块中
函数的优点之一是,使用它们可将代码块与主程序分离。通过给函数指定描述性名称,可让主程序容易理解得多。你还可以更进一步,将函数 存储在被称为模块 的独立文件中,再将模块导入 到主程序中。import语句允许在当前运行的程序文件中使用模块中的代码。 1、导入整个模块
2、导入特定的函数
你还可以导入模块中的特定函数,这种导入方法的语法如下 from module_name import function_name 通过用逗号分隔函数名,可根据需要从模块中导入任意数量的函数: from module_name import function_0, function_1, function_2 若使用这种语法,调用函数时就无需使用句点。由于我们在import 语句中显式地导入了函数make_pizza() ,因此调用它时只需指定其名称3、使用as 给函数指定别名
如果要导入的函数的名称可能与程序中现有的名称冲突,或者函数的名 称太长,可指定简短而独一无二的别名 ——函数的另一个名称,类似 于外号。要给函数指定这种特殊外号,需要在导入它时这样做4、使用as 给模块指定别名
5、导入模块中的所有函数
使用星号(* )运算符可让Python导入模块中的所有函数
标签:函数,形参,python,列表,导入,实参,默认值 From: https://www.cnblogs.com/buffaloes/p/16883832.html