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

  • 10
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值