一、函数的定义
def describe_tool(tool,language):"""显示名称"""print(f"{tool.title()} is writted by {language.title()}!")describe_tool('ansible','python')
Tips1:函数可以没有参数列表;
Tips2:"""是文档字符串标识。
二、向函数传递参数
2.1 位置实参
def describe_tool(tool,language):"""显示名称"""print(f"{tool.title()} is writted by {language.title()}!")describe_tool('ansible','python')describe_tool('openstack','go')describe_tool('c','keepalive')
Ansible is writted by Python!Openstack is writted by Go!C is writted by Keepalive![Finished in 0.3s]
位置实参方式是根据形参的定义顺序与实参一一关联的。
2.2 关键字实参
def describe_tool(tool,language):"""显示名称"""print(f"{tool.title()} is writted by {language.title()}!")describe_tool('ansible','python')describe_tool('openstack','go')describe_tool(language='c',tool='keepalive')
Ansible is writted by Python!Openstack is writted by Go!Keepalive is writted by C![Finished in 0.3s]
2.3 默认值
def describe_tool(tool,language='python'):"""显示名称"""print(f"{tool.title()} is writted by {language.title()}!")describe_tool('ansible','python')describe_tool('ansible')describe_tool(tool='ansible')
Ansible is writted by Python!Ansible is writted by Python!Ansible is writted by Python![Finished in 0.3s]
三、函数返回值
3.1 定义一个有返回值的函数
def get_full_name(first,last,middle):"""显示名称"""full_name = f"{first} {last}{middle}"return full_name.title()first_persion = get_full_name('black','ersion','ton')print(first_persion)
3.2 定义可选实参
def get_full_name(first,last,middle=''):"""显示名称"""if middle:full_name = f"{first} {middle}{last}"else:full_name = f"{first} {last}"return full_name.title()first_persion_1 = get_full_name('black','ersion','ton')first_persion_2 = get_full_name('nicolas','cage')print(first_persion_1)print(first_persion_2)
3.3 返回字典
def describe_tool(service,language,version=None):"""显示名称"""language = {'package':'service','tool':'python'}if version:language['version'] = versionreturn languageyum_info = [describe_tool('keepalived','c'),describe_tool('ansible','python',2.7)]print(yum_info)
四、向函数传递列表
4.1 向函数传递列表并修改元素
def check_id(id_occupied,id_available,id_requested):"""函数说明注释"""for id in id_requested:if id in id_available:id_available.remove(id)id_occupied.append(id)print(f"The id {id} is available, sucessfully!")else:print(f"The id {id} is accupied, please try again!")print(f"The id_occupied list is: {id_occupied}")print(f"The id_available list is: {id_available}")list_available = ['jack','luck','nice']list_requested = ['jack','luck','pick']list_occupied = []check_id(list_occupied,list_available,list_requested)print(f"The id_total list is: {list_available}")
The id jack is available, sucessfully!The id luck is available, sucessfully!The id pick is accupied, please try again!The id_occupied list is: ['jack', 'luck']The id_available list is: ['nice']The id_total list is: ['nice'][Finished in 0.3s]
4.2 向函数传递列表且不修改元素
def check_id(id_occupied,id_available,id_requested):"""函数说明注释"""for id in id_requested:if id in id_available:id_available.remove(id)id_occupied.append(id)print(f"The id {id} is available, sucessfully!")else:print(f"The id {id} is accupied, please try again!")print(f"The id_occupied list is: {id_occupied}")print(f"The id_available list is: {id_available}")list_available = ['jack','luck','nice']list_requested = ['jack','luck','pick']list_occupied = []check_id(list_occupied,list_available[:],list_requested)print(f"The id_total list is: {list_available}")
The id jack is available, sucessfully!The id luck is available, sucessfully!The id pick is accupied, please try again!The id_occupied list is: ['jack', 'luck']The id_available list is: ['nice']The id_total list is: ['jack', 'luck', 'nice'][Finished in 0.3s]
本例子中传递实参时只传递了list_available的副本,因此对原列表没有任何影响。
五、使用任意数量的实参
5.1 传递任意数量的实参
def check_id(*id):"""函数说明注释"""print(f"The id_available list is: \n{id}")check_id('jack','luck','nice')
Tips1:*id使得python创建一个名为id的空元组,并将所有元素都封装在这个元组中。
5.2 位置实参和任意数量的实参混用
def check_id(id_long,*id):"""函数说明注释"""print(f"The length of id must be {id_long}\nThe id_available list is: \n{id}")check_id(3,'jack','luck','nice')
Tips2:在同时使用位置实参和任意数量的实参时,必须把接收任意数量的形参放在参数表的最后。
5.3 使用任意数量的关键字实参
def package_languge(package,language,**packages_name):"""函数说明注释"""packages_name[package] = languagereturn packages_namepackage_info = package_languge('tomcat','java',keepalive='c++',ansible='python',openstack='python',kubernetes='go')for package,language in package_info.items():print(f"The {package.title()} is written by {language.title()}!")
The Keepalive is written by C++!The Ansible is written by Python!The Openstack is written by Python!The Kubernetes is written by Go!The Tomcat is written by Java![Finished in 0.3s]
Tips3:**packages_name使得python创建一个名为packages_name的空字典,并将收到的所有键值对都放在字典中。
六、使用任意数量的实参
6.1 导入整个模块
def package_languge(*package_name):"""函数说明注释"""packages_info = {'tomcat':'java','keepalive':'c++','ansible':'python','openstack':'python','kubernetes':'go'}for package in package_name:if package in packages_info.keys():print(f"The {package.title()} package is written by {packages_info[package].title()}!")else:print(f"The {package.title()} package is not found!")
import packagepackage.package_languge('php','keepalive','nginx')
The Php package is not found!The Keepalive package is written by C++!The Nginx package is not found![Finished in 0.3s]
Tips1:(1)模块的扩展名必须为.py;(2)模块中可以放入任意代码;(3)主程序运行时会幕后复制模块中的代码;(4)module.function()用来调用模块中的函数.
6.2 导入模块中的特定函数
from package import package_langugepackage_languge('php','keepalive','nginx')
Tips2:导入特定模块中的特定函数时,调用函数时无须使用'.',直接调用即可。
6.3 为导入的模块重命名
import package as findfind.package_languge('php','keepalive','nginx')
Tips3:需要重命名的情形:
a.原名称与当前程序中的名称冲突;
b.原名称太繁琐不利用引用.
6.4 为导入的函数重命名
from package import package_languge as find_languagefind_language('php','keepalive','nginx')
6.5 导入模块中全部函数
from package import *package_list('php','keepalive','nginx')package_languge('php','keepalive','nginx')
Tips4:编写函数时在实参的关键字参数和形参的默认值处等号两边不要写空格.
文章转载自运维扫盲人,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




