python函数(无参有参,形参和实参,参数类型)个人理解用法 |
您所在的位置:网站首页 › 函数的形参和调用此函数实参的个数可以不一致 › python函数(无参有参,形参和实参,参数类型)个人理解用法 |
在编写自动化用例代码时老是会写很多函数,对函数的参数理解的很混乱,在这里我对函数的用法进行一个简单的总结和整理 函数定义 def 函数名(形参1,形参2,...): 代码 #如果有必要返回一个结果给调用者就需要加上return 返回值,没必要就不用加返回值 return 返回值 函数调用 函数名(实参1,实参2,...)根据函数是否带参数,分为无参函数和带参函数。 1.无参函数不会对一些实参(变量,常量,表达式,函数等)进行操作,无参函数没有形参,调用函数没有实参。 例1:定义一个函数,函数功能:打印hello。调用这个函数。 #定义函数 def print_hello(): print ('hello') #调用函数 print_hello()例2:定义一个函数,打开chrome浏览器无痕模式,并访问百度。调用这个函数。 #!/usr/bin/env python # -*- coding: utf-8 -*- from selenium import webdriver #定义函数 def open_baidu(): options = webdriver.ChromeOptions() # 无痕模式 options.add_argument('--incognito') # 启动chrome浏览器无痕模式 driver = webdriver.Chrome(chrome_options=options) # 打开百度 driver.get("http://www.baidu.com") #调用函数 open_baidu()从上面两个栗子可以看出:如果不需要对任何的参数(变量,常量,表达式,函数等)进行操作,就不需要定义函数时加上形参。 2.带参函数当需要对一些实参(可以是变量,常量,表达式,函数等)进行一些操作时,就需要对函数定义形参和调用时传入对应的实参。 实参类型包括:位置实参,关键字实参 形参类型包括:默认参数,可变参数,关键字参数 2.1实参类型2.1.1 位置实参:要求实参的顺序与形参的顺序相同 注意:位置参数位置和个数必须对应(实参多少个形参就多少个)。 举个栗子:打印名字和成绩 def print_info(name,score): print name print score print_info('jack',100) jack 100ps:有时候工作中会疑惑,在python中实参和形参是否名字能够相同? 然后我就试了一下:把实参赋给一个变量,变量名与形参名一样,运行后与上面一样。 name='jack' score=100 def print_info(name,score): print name print score print_info(name,score)结果运行结果一样: jack 1002.1.2 关键字实参:关键字实参是传递给函数的名称—值对。直接在实参中将名称和值关联起来了,因此向函数传递实参时不会混淆。 作用:让你无需考虑函数调用中的实参顺序,还清楚地指出了函数调用中各个值的用途,所以在传入时无需考虑顺序。 举个栗子:(这个例子实参位置没有对应形参位置) def print_info(name,score): print name print score #这里实参位置没有对应形参位置 print_info(score=100,name='jack')结果运行正常 jack 100 2.2形参类型2.2.1.默认参数 举个栗子:计算X的n次方,计算三个值(2,3,4)的平方,计算5的三次方。 #计算x的n次方并返回打印结果 def power(x, n=2): s = 1 while n > 0: n = n - 1 s = s * x return print(s) power(2) power(3) power(4) power(5,3)结果: 4 9 16 125由上面的例子可以得出: 当设置了默认参数后,实参需要传入的值与默认参数一样时就不需要对应的实参(即:计算2,3,4的平方时不需要传入第二个实参 2,当需要计算5的3次方时就需要传入第二个实参) 注意:必选参数在前,默认参数在后(例子中:x在前,n在后)。(否则Python的解释器会报错)。当函数有多个参数时,把变化大的参数放前面,变化小的参数放后面。变化小的参数就可以作为默认参数。 2.2.2 可变参数 顾名思义,可变参数就是传入的参数个数是可变的,可以是1个、2个到任意个,还可以是0个。 当传入的参数个数不确定时,就需在形参前加 * 来表示可变参数 举个例子:计算输入的实参总和 #计算实参总和 def Plus(*numbers): sum = 0 for n in numbers: sum = sum + n print(sum) Plus(1,2,3) #传入参数可以是0个 Plus()运行结果: 6 0ps:在函数内部,参数numbers接收到的是一个tuple 如果已经有一个list或者tuple,要调用一个可变参数怎么办?可以这样做: def Plus(*numbers): sum = 0 for n in numbers: sum = sum + n print(sum) #已经有一个list num=[1,2,3,4,5] #在实参前加* Plus(*num) Plus()*num表示把num这个list的所有元素作为可变参数传进去。 运行结果: 15 02.2.3关键字参数 关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict。上面的关键字实参是传入时无需考虑顺序,而这里的关键字参数是可以传入任意个数的关键字参数。函数的调用者可以传入任意不受限制的关键字参数(参数的key和value都是自己定义的)。 这里的关键字实参和上面的区别是什么?这个关键字参数是对形参操作的哈。 当传入的参数为可变关键词参数时,就需在形参前加 ** 来表示可变参数 举个栗子: #name和age 为必选参数,**kw为可选参数 def person(name, age, **kw): print('name:', name, 'age:', age, 'other:', kw) #可以在name和age后面添加任意个数的实参 person('jack',20,city='chengdu',hobby='draw')结果: name: jack age: 20 other: {'city': 'chengdu', 'hobby': 'draw'}和可变参数类似,也可以先组装出一个dict,然后,把该dict转换为关键字参数传进去: def person(name, age, **kw): print('name:', name, 'age:', age, 'other:', kw) others_info= {'city': 'chengdu', 'hobby': 'draw'} person('jack',20,**others_info)结果一样: name: jack age: 20 other: {'city': 'chengdu', 'hobby': 'draw'} 关于返回值顾名思义:函数返回的值被称为返回值。(听君一席话,如听一席话) 什么时候使用? 如果有必要返回一个结果给调用者就需要加上return 返回值,没必要就不用加返回值 一般来说调用有返回值的函数时,需要提供一个变量,用于存储返回的值。 举个栗子 def print_info(name,score): return print(name,'的成绩为',score) info=print_info('jack',100) jack 的成绩为 100函数可以返回任何类型的值,包括列表和字典等较为复杂的数据结构 例如:返回一个字典 def print_info(name,score): person={'name':name,'score':score} return person info=print_info('jack',100) print(info)运行结果 {'name': 'jack', 'score': 100}函数也可以返回多个值: 举个栗子:输入半径,计算周长和面积并返回 #!/usr/bin/env python #coding=utf-8 import math pi = 3.14159265358979324 #计算周长和面积并返回 def cal(x): area=pi*x*x cir =2*pi*x return area,cir #调用函数cal,并将结果赋值给result result=cal(1) #打印调用结果 print(result)结果: (3.141592653589793, 6.283185307179586)注意:返回多个值的函数的返回值是一个tuple! |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |