python函数(无参有参,形参和实参,参数类型)个人理解用法

您所在的位置:网站首页 函数的形参和调用此函数实参的个数可以不一致 python函数(无参有参,形参和实参,参数类型)个人理解用法

python函数(无参有参,形参和实参,参数类型)个人理解用法

#python函数(无参有参,形参和实参,参数类型)个人理解用法| 来源: 网络整理| 查看: 265

在编写自动化用例代码时老是会写很多函数,对函数的参数理解的很混乱,在这里我对函数的用法进行一个简单的总结和整理

函数定义 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 100

ps:有时候工作中会疑惑,在python中实参和形参是否名字能够相同?

然后我就试了一下:把实参赋给一个变量,变量名与形参名一样,运行后与上面一样。

name='jack' score=100 def print_info(name,score): print name print score print_info(name,score)

结果运行结果一样:

jack 100

2.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 0

ps:在函数内部,参数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 0

2.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