首页 > 编程语言 >软件测试|什么是Python函数及名称空间?

软件测试|什么是Python函数及名称空间?

时间:2023-02-07 18:36:46浏览次数:40  
标签:函数 Python demo 参数 func print def 软件测试

软件测试|什么是Python函数及名称空间?_变量名

Python函数及名称空间

函数

  1. 什么是函数?

函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。
作用:
函数能提高应用的模块性,和代码的重复利用率

  1. 函数的语法结构
def 函数名(参数):
'''函数注释'''
函数体代码
return 返回值
1.def
定义函数的关键字
2.函数名
等同于变量名
3.参数
可以不填,主要是在使用函数的时候规定外界要不要传数据进来
4.函数注释
类似于说明书,用来介绍这段函数体的使用说明
5.函数体代码
是整段函数的核心,主要取决于程序员的编写
6.return
使用函数之后可以返回数据给使用者,可以不填
  1. 函数的定义与调用
1.函数在定义阶段只检测语法,不执行代码
def func():
pass
2.函数在调用阶段才会执行函数体代码
func()
3.函数必须先定义,后调用
4.函数的调用使用:函数名()
如有参数需要在括号内按相应的规则填写
  1. 函数的分类
1.空函数
函数体代码为空,主要用于先创建一个框架,函数体用pass补全
def register():
"""注册功能"""
pass
2.无参函数
函数名后方括号内无需填写参数
def index():
print('from index function')
3.有参函数
函数名后方括号内需要填写参数才可以调用
def func(a):
print(a)
  1. 函数的返回值
1.什么是返回值
调用函数之后返回给调用者的结果
2.如何获取返回值
# 变量名 赋值符号 函数的调用
res = func() # 先调用函数,然后用变量名接收结果
3.返回值的多种结果
1.函数体代码中没有return时,默认返回None
2.函数体代码中有return时,后面没写数据,返回None
3.函数体代码中有ruturn时,返回后面写的值
4.函数体代码中有return时,后面写多个数据,以元组的形式返回
我们以list形式写的值就会以列表返回,否则默认以元组形式返回
5.函数体代码遇到retrun会自动结束函数体代码
  1. 函数的参数
1.形式参数
在函数定义阶段函数名后方括号内填写的参数,简称‘形参’
2.实际参数
函数调用时,函数名后方括号内填写的参数,简称‘实参’

-----------------------------------------------------------------------------
'''
形参与实参的关系:
形参类似于变量名,在函数定于阶段可以随便写,最好做到见名知意
def register(name,pwd):
pass

实参类似于数据值 在函数调用阶段与形参临时绑定 函数运行结束立刻断开
register('kangkang',123) 形参name与kangkang绑定 形参pwd与123绑定

'''
-----------------------------------------------------------------------------

函数参数

引言:
函数的参数主要是在使用函数的时候规定外界要不要传数据进来
参数分为两种:
1、形参
2、实参
而形参和实参又共分为以下几个种类

  1. 位置参数
1.位置形参:
在函数定义阶段括号内从左往右依次填写的变量名
def func(a, b, c):pass

2.位置实参:
在函数调用阶段括号内从左往右依次填写的数据值
func(1, 2, 3)
'''
定义:
1、在调用时,形参和实参位置必须一致
2、在调用时,形参和实参数量必须一致
3、在调用时可用关键字传参
3.1.关键字传参需要跟在位置传参的后面
4、同一个形参在调用时不能多次赋值
5、实参可以传递绑定数据值的变量名
'''

在下面这个函数中,a是必选参数,是必须要指定的

>>> def demo_func(a):
... print(a)
...
>>> demo_func(10)
10
>>> demo_func() # 不指定会报错
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: demo_func() missing 1 required positional argument: 'a'

在下面这个函数中, name和age 都是必选参数,在调用指定参数时,如果不使用关键字参数方式传参,需要注意顺序

>>> def print_profile(name, age):
... return f"我的名字叫{name},今年{age}岁了"
...
>>> print_profile("kangkang", 18)
'我的名字叫kangkang,今年18岁了'

如果参数太多,你不想太花精力去注意顺序,可以使用关键字参数方式传参,在指定参数时附上参数名,比如这样:

>>> print_profile(age=18, name="kangkang")
'我的名字叫kangkang,今年18岁了'
  1. 默认参数
1.默认形参
在函数定义阶段,可填写默认值
def func(name, age = '18')
2.默认实参
在调用阶段,默认值不需要修改时可以不用传参,结果为默认值
def func('kangkang')

'''
定义:
默认参数必须放在位置参数的后面,否则程序会报错
'''

在下面这个函数中,b是可选参数(默认参数),可以指定也可以不指定,不指定的话,默认为10

>>> def demo_func(b=10):
... print(b)
...
>>> demo_func(20)
20
>>> demo_func()
10

在定义时,必选参数一定要在可选参数的前面,不然运行时会报错

>>> def demo_func(a=1, b):
... print(a, b)
...
File "<stdin>", line 1
SyntaxError: non-default argument follows default argument
>>>
>>> def demo_func(a, b=1):
... print(a, b)
...
>>>

3、可变长参数

  1. 一个*号
1.可变长形参 *  (一个*号)
在函数定义阶段,括号内的参数可接收多余位置实参,*后的参数名约定俗成为args
def num (x,y,*args):
print(args)
return 1
num(1,2,3,4,5)
----------------------------------------------------------
(3, 4, 5) *args就为(3,4,5),1,2分别传给了x,y


2.可变长实参 * (一个*号)
在函数调用阶段,*可接收各类数据库并循环进行传参
def func(x, y, z, *args):
print(x, y, z, args)
func(1, *(1, 2), 3, 4)
----------------------------------------------------------
1 1 2 (3, 4)

'''
须知:
1.字符串 # 按字符顺序依次传参
2.列表 # 按列表数据值顺序依次传参
3.集合 # 集合无序,数据值传参顺序随机
4.元组 # 按元组数据值顺序依次传参
5.字典 # 只能传参字典K值
'''

在下面这个函数中,args 参数和上面的参数名不太一样,在它前面有一个 *,这就表明了它是一个可变参数,可以接收任意个数的不指定参数名的参数。

>>> def demo_func(*args):
... print(args)
...
>>>
>>> demo_func(10, 20, 30)
(10, 20, 30)

可变位置参数可以放在必选参数前面,但是在调用时,必选参数必须要指定参数名来传入,否则会报错

>>> def demo_func(*args, b):
... print(args)
... print(b)
...
>>> demo_func(1, 2, 100)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: demo_func() missing 1 required keyword-only argument: 'b'
>>>
>>> demo_func(1, 2, b=100)
(1, 2)
100
  1. 两个*号
1.可变长形参 **  (两个*号)
会将溢出的关键字实参,储存成字典的形式,然后赋值给**号后的形参,**号后参数约定俗成,称为kwargs
def func(**kwargw):
print(kwargw)

func(a=5)
----------------------------------------------------------
{'a': 5}


2.可变长实参 ** (两个*号)
将字典打散成关键字参数的形式传递给形参
def func(name, age, hobby):
print(name, age, hobby)


dict_user_name = {'name': 'kangkang', 'age': 18, 'hobby': 'ball'}
func(**dict_user_name)
----------------------------------------------------------
kangkang 18 ball

在下面这个函数中,kw 参数和上面的 *args 还多了一个 * ,总共两个 ** ,这个意思是kw 是一个可变关键字参数,可以接收任意个数的带参数名的参数。

>>> def demo_func(**kw):
... print(kw)
...
>>> demo_func(a=10, b=20, c=30)
{'a': 10, 'b': 20, 'c': 30}

可变关键字参数则不一样,可变关键字参数一定得放在最后,下面三个示例中,不管关键字参数后面接位置参数,还是默认参数,还是可变参数,都会报错。

>>> def demo_func(**kw, a):
File "<stdin>", line 1
def demo_func(**kw, a):
^
SyntaxError: invalid syntax
>>>
>>> def demo_func(**kw, a=1):
File "<stdin>", line 1
def demo_func(**kw, a=1):
^
SyntaxError: invalid syntax
>>>
>>> def demo_func(**kw, *args):
File "<stdin>", line 1
def demo_func(**kw, *args):
^
SyntaxError: invalid syntax

3、*args和**kwargs一起使用

def num(x, y, f=0, *args, **kwargs):
print(f)
print(args)
print(kwargs)
return 1


num(1, 2, 6, 7, 8, j=3, n=4, q=5)
---------------------------------------------------------------------------
6
(7, 8)
{'j': 3, 'n': 4, 'q': 5}

在定义时,可变位置参数一定要在可变关键字参数前面,不然运行时也会报错

>>> def demo_func(**kw, *args):
File "<stdin>", line 1
def demo_func(**kw, *args):
^
SyntaxError: invalid syntax
>>>
>>> def demo_func(*args, **kw):
... print(args, kw)

名称空间

引言:
名称空间就是python用来储存名称的空间(可以简单理解为储存变量名的空间)
名称空间可分为以下三种,并且各自拥有不同的作用

1、名称空间的类型、作用及存活时间

  • 内置名称空间
  • 作用:用来储存python解释器内置方法名的空间
  • 作用域:python解释器
  • 存活周期:解释器开启则产生,关闭则销毁
  • 全局名称空间
  • 作用:用来储存py文件内变量名的空间
  • 作用域:单个py文件
  • 存活周期:单个py文件打开时产生,关闭则销毁
  • 局部名称空间
  • 作用:用来储存函数体代码内变量名的内存空间
  • 作用域:函数体代码、类别体代码
  • 存活周期:函数体、类别体代码运行时产生,运行完毕销毁

2、名字的查找顺序

首先,在查找前,我们需要分请名字所在的域

python运行代码时由外部代码向内运行,而名字则是由内向外查找:

  • 局部内存空间

局部内存空间>>>全局内存空间>>>内置内存空间

  • 全局空间

    全局内存空间>>>内置内存空间

且要符合以下几点要求:

1、在局部内存空间嵌套,由子代码向父代码中查找

2、相互独立的代码体默认无权互相访问

软件测试|什么是Python函数及名称空间?_变量名_02


标签:函数,Python,demo,参数,func,print,def,软件测试
From: https://blog.51cto.com/u_15640304/6042618

相关文章

  • 软件测试|最全的Python for循环和while循环使用介绍
    Pythonfor循环和while循环循环简单来说就是让一段代码按你想要的方式多次运行。软件拥有强大的运算能力,就是由循环提供的。在Python中支持的循环由两种:while循环和for......
  • 软件测试|教你轻松玩转Python日期时间
    Python基础之日期时间处理前言:软件测试工作中,有时会需要我们在代码中处理日期以及时间,python内置的datetime模块就可以很好地帮我们处理这个问题。该模块常用的类有:类名功能......
  • 软件测试|f-string格式化输出的这些用法,90%的Pythoner不知道
    f-srtingf-string是Python3.6版本开始引入的特性,想必很多Python用户都基础性的使用过,通过它我们可以更加方便地向字符串中嵌入自定义内容,但f-string真正蕴含的功能远......
  • 软件测试|pip命令,你真的会了吗?
    什么是pip?pip的全称是Packageinstallerforpython,顾名思义就是pip就是Python的包安装器。我们在安装Python时,就会同时安装上pip,通过pip命令,可以把远端仓库(Pypi)里的包下载......
  • 软件测试|教你如何用Python获取昨天今天明天的日期
    我一直认为,本山大叔的昨天今天明天这个小品是春晚永远的经典,看完2023年春晚后(不对,我根本没看完,因为2023年春晚催眠效果太强),我更加坚定了我的想法。闲话就到这里,本山大叔的小......
  • 软件测试|Python高手教你玩转 Excel 自动化
    在日常的工作中,对Excel的操作必不可少,如果涉及到大量的Excel操作的话,手动处理效率还是比较低的,因此Excel自动话完全有必要,今天和大家分享一下如何利用Python来批量......
  • 软件测试|Python神器logging,你真的了解吗?
    logging是python标准模块,用于记录和处理程序中的日志。功能很强大,官方文档很详细,网上也有大量的说明和教程,但是对很多初次接触的同学来说,存在一些障碍。一是因为标准库文......
  • [oeasy]python0074_修改字体背景颜色_background_color_背景色
    修改背景色回忆上次内容上次将asciiart和颜色一起来玩7种基本色变化多端不过到目前为止改的都是​​前​​景色​​背​​景色可以修改吗?重温参数具体动手试试print("\0......
  • 解决“ORA-00937: 不是单组分组函数”报错
    原SQL:selectdistincta.begin_exec_time,b.drug_code,b.drug_name,b.drug_spec,sum(b.public_retail_price*a.total_drug)as"总金额",b.public_retail_pricefromZOE......
  • Python知识点
    1.使用os.path.realpath(__file__)获取文件所在目录路径+文件名2.os.path.abspath('.'),获取当前文件所在路径(当前文件的上一级路径)3..os.path.dirname(path),返回path的目......