函数、全局变量

写代码时注意的几点事项:

1、一般写代码的时候尽量少用或不用全局变量,首先全局变量不安全,大家协作的情况下,代码公用容易被篡改,其次全局变量会一直占用系统内容。

2、函数里如果有多个return值,会把几个return值放到一个元组里

def hello(a,b,c,d):
return a,b,c,d
res=hello('1111','2222','3333','4444')
print(res)

3、一个函数尽量只写一个功能

4、用简练的代码写高级的程序

例如:循环一个list的每一个值,通常可以用for循环

num = [1,2,3,4,5,6,7,8,9]
newnum=[]
for i in num:
newnum.append(i)
print(newnum)

python提供一种更简洁的方式来实现,列表推导式:

num = [1, 2, 3, 4, 5, 6, 7, 8, 9]
newnum=[str(x) for x in num ]
print(newnum)

又例如,交换A,B的值,通常做法是添加第三方变量:

a=1
b=2
#a=2,b=1
c=0
c=a
a=b
b=c
print(a,b)

python提供了一种更简便的方法,直接交换A,B的值

#python中可以直接交换
a=1
b=2
a,b=b,a
print(a,b)

5、函数即变量

函数名也是一个变量,不加(),只是函数名。

def say(name):
print(name)
na=say
na('sss')

上述代码看到,我们把na=say ,因为say是一个函数,所以传给na后,na也变为一个函数,直接用na调用,也执行了定义的函数。再如:

def add():
print('tianjia')
def view():
print('chakan')
def delete():
print('shanchu')
menu={
'1':add,
'2':view,
'3':delete
}
case=input('请输入选择:1、2、3').strip()
if case in menu:
menu[case]()
else:
print('输入错误')

上述代码我们定义了三个函数,分别代表添加,查看,删除操作,同时定义一个字典来存放不同选择代表的调用不同函数;

当执行input时,判断输入的key是不是存在于字典中,menu[case](),如果存在,menu[case]的value值对应的函数名,加上()则表示执行函数;

当然这种函数即变量调用的时候适用于传参为空或者传参相同的场合。

内置函数

之前已经用到了一些python的内置函数,今天来学习一些常用的内置函数。

len() 方法返回对象(字符、列表、元组等)长度或项目个数。

len(s) --s对象

str='123456789'
list=['1adssss',2,'3','4']
print(len(str))#长度;
print(len(list))

执行结果:9、4

input()

python3 里 input() 默认接收到的是 str 类型。

st=input('shuru:')#输入
print(type(st))

执行结果:输入4,查看到input的类型是<class 'str'>

如果想要int类型,可以进行强制转化int()

st=int(input('shuru:'))#输入
print(type(st))

查看执行结果:

shuru:3
<class 'int'>

print() 方法用于打印输出,最常见的一个函数。

print('打印')#输出

执行结果:打印

type()查看对象类型

list=['1adssss',2,'3','4']
print(type('sss'))#查看类型
print(type(2))
print(type(list))

查看执行结果:

<class 'str'>
<class 'int'>
<class 'list'>

all() 函数用于判断给定的可迭代参数 iterable 中的所有元素是否不为 0、''、False 或者 iterable 为空,如果是返回 True,否则返回 False。简单的说就是判断参数是否都为真;

any() 函数用于判断给定的可迭代参数 iterable 是否全部为空对象,如果都为空、0、false,则返回 False,如果不都为空、0、false,则返回 True。简单说就是参数有任意一个为真,则返回真。如下:

print(all([0,1,2,3,4,5]))#判断其中的值都为真,则返回真
print(any([0,1,2,3,4,5]))#判断其中有一个值为真,则返回值真

查看执行结果:False、True

bin() 返回一个整数 int 或者长整数 long int 的二进制表示。

bin(10)#十进制转2进制
ejz=bin(100)
print(ejz)
print(ejz.replace('0b',''))

查看执行结果:0b1100100、1100100

代码中,如果直接执行bin(),会有0b开头代表二进制数,想要得到一个整数类型,我们把0b替换掉;

chr() 用一个范围在 range(256)内的(就是0~255)整数作参数,返回一个对应的字符。

chr(i) -- 可以是10进制也可以是16进制的形式的数字。

print(chr(88))#打印数字对应的ascii
print(chr(0x61))

执行查看结果:
X
a

ord() 函数是查询一个长度为1的字符串对应的ASCII值

print(ord('#'))#打印字符串的对一个的ASCII
print(ord('e'))#打印字符串的对一个的ASCII

查看执行结果:35、101

dir() 函数不带参数时,返回当前范围内的变量、方法和定义的类型列表;带参数时,返回参数的属性、方法列表。

a='aaa'
b={}
c=[]
d=set()
print(dir(a))#查看字符串的方法
print(dir(b))#查看字典的方法
print(dir(c))#查看list的方法
print(dir(d))#查看元组的方法
print(dir())#查看当前模块的属性列表

查看执行结果:可以看到打印出了对应对象类型的方法,如果有写对象不清楚其方法,可以用此方法查看

['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']
['__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'clear', 'copy', 'fromkeys', 'get', 'items', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values']
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
['__and__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__iand__', '__init__', '__ior__', '__isub__', '__iter__', '__ixor__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__or__', '__rand__', '__reduce__', '__reduce_ex__', '__repr__', '__ror__', '__rsub__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__xor__', 'add', 'clear', 'copy', 'difference', 'difference_update', 'discard', 'intersection', 'intersection_update', 'isdisjoint', 'issubset', 'issuperset', 'pop', 'remove', 'symmetric_difference', 'symmetric_difference_update', 'union', 'update']
['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'a', 'b', 'c', 'd']

eval() 函数用来执行一个字符串表达式,并返回表达式的值。

print(eval('[]'))#执行简单的python代码
a=3
b=a
print(eval('b'))
print(eval('1+2'))

查看执行结果:[]、3、3

excel()函数可以执行一个稍微复杂的python或执行一个python文件

code='''def a(): print('aaaa')'''
print(exec(code))
a()#调用

上述代码中exec执行了code,解析出其中的代码段定义了一个函数a(),所以在后面的调用a()的时候没有报错;直接打印了aaaa

又如,我们有一个python文件,可以用读的形式执行代码:

with open('clean_log.py','r',encoding='utf-8') as f:
exec(f.read())

上述代码的意思就是执行了clean_log.py文件中的代码。

zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。

如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操作符,可以将元组解压为列表。

比如我们同时循环两个列表的元素,可以用zip

ids=[1,2,3,4,5,6,7,-1,-2]
names=['aaa','bbb','ccc','ddd','eee','fff']
for id,name in zip(ids,names):
print(id,name)

查看执行结果:

1 aaa
2 bbb
3 ccc
4 ddd
5 eee
6 fff

在比如我们直接打包两个列表:

ids=[1,2,3,4,5,6,7,-1,-2]
names=['aaa','bbb','ccc','ddd','eee','fff']
print(list(zip(ids,names)))

查看执行结果:

[(1, 'aaa'), (2, 'bbb'), (3, 'ccc'), (4, 'ddd'), (5, 'eee'), (6, 'fff')]

sorted() 函数对所有可迭代的对象进行排序操作。 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。

ids=[1,2,3,4,5,6,7,-1,-2]
print(sorted(ids,reverse=True))#默认是升序排列,可以用reverse进行降序

查看执行结果:

[7, 6, 5, 4, 3, 2, 1, -1, -2]

对一个字符串进行排序:

print(sorted('2125343230'))
print(sorted('asdgowequwxasd'))

查看执行结果:返回的是两个默认升序的列表

['0', '1', '2', '2', '2', '3', '3', '3', '4', '5']
['a', 'a', 'd', 'd', 'e', 'g', 'o', 'q', 's', 's', 'u', 'w', 'w', 'x']

map() 会根据提供的函数对指定序列做映射。

第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。

def func(a):
if a%2==0:
return True
else:
return False
num2=[1,2,3,4,5,6,7,8,9,10]
nums=[x for x in range(11)]
res=map(func,nums)
res1=map(func,num2)
print(list(res))
print(list(res1))#map 的结果是一串字符串,需要强制类型转换成list查看

实际就是用list中的每一个值调用func函数,返回的是一个字符串,需要强制转化一下成list,在这里map等同于下面的代码:

all=[]
for num in nums:
res=func(num)
all.append(res)
print(all)

执行代码可以看到,返回值是一样的:

[True, False, True, False, True, False, True, False, True, False, True]
[False, True, False, True, False, True, False, True, False, True]
[True, False, True, False, True, False, True, False, True, False, True]

filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。

该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。

与map类似,只不过filter是用来过滤的。

def func(a):
if a%2==0:
return True
else:
return False
nums=[0,1,2,3,4,5,6,7,8,9,10]
res=filter(func,nums)#如果返回的是值0,0会当作False 过滤掉
print(list(res))

查看执行结果:

[0, 2, 4, 6, 8, 10]

json函数

使用json函数需要导入json模块

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,易于人阅读和编写。

json.dumps 用于将 Python 对象编码成 JSON 字符串。

例如,我们向文件中写入一个字典表时,写入的是一个字符串形式的,不方便查看,这时就可用用json进行格式转化。

import json
d={'吉普车':{
'color':'fffff',
'count':20,
'price':100000
},
'小轿车': {
'color': '00000',
'count': 50,
'price': 60000
}
}
f=open('aaa','a+',encoding='utf-8')
f.seek(0)
f.write(str(d))

执行上述代码,写入文件的是一个字符串。

import json
d={'吉普车':{
'color':'fffff',
'count':20,
'price':100000
},
'小轿车': {
'color': '00000',
'count': 50,
'price': 60000
}
}
f=open('aaa','a+',encoding='utf-8')
f.seek(0)
res=json.dumps(d,indent=4,ensure_ascii=False)#json 把字典转化为json,indent表示缩进,显示中文
f.write(res)

执行上述代码,查看文件:

{
"吉普车": {
"count": 20,
"color": "fffff",
"price": 100000
},
"小轿车": {
"count": 50,
"color": "00000",
"price": 60000
}
}

还有一个dump方法,与dumps的方法区别是:

#dump 操作的是文件 ,dumps操作的是字符串
#dump 第一个参数是字典数据,第二个参数是文件,自动写入文件

如上边的代码用dump改造一下:

import json
d={'吉普车':{
'color':'fffff',
'count':20,
'price':100000
},
'小轿车': {
'color': '00000',
'count': 50,
'price': 60000
}
}
f=open('aaa','a+',encoding='utf-8')
f.seek(0)
json.dump(d,f,ensure_ascii=False,indent=4)#d表示字典数据,f是文件
f.close()

查看执行结果,同样文件中写入了json串,省略了一步write操作。

json.loads 用于解码 JSON 数据。该函数返回 Python 字段的数据类型。我们用上述写入文件的json进行试验:

import json
f=open('aaa','r',encoding='utf-8')
res=f.read()
dict_res=json.loads(res)#把json转化python的数据类型字典
print(dict_res)

执行查看结果:返回的是python的字典类型

{'吉普车': {'count': 20, 'color': 'fffff', 'price': 100000}, '小轿车': {'count': 50, 'color': '00000', 'price': 60000}}

同样的还有一个load方法,与dump方法一样,参数中传入文件,直接进行转换,省略了一步读的动作:

import json
f=open('aaa','r',encoding='utf-8')
print(json.load(f))

查看执行结果,返回了字典类型:

{'小轿车': {'count': 50, 'price': 60000, 'color': '00000'}, '吉普车': {'count': 20, 'price': 100000, 'color': 'fffff'}}

python自动化测试学习笔记-4内置函数,处理json的更多相关文章

  1. Python学习笔记-Day3-python内置函数

    python内置函数 1.abs    求绝对值 2.all 判断迭代器中的所有数据是否都为true 如果可迭代的数据的所有数据都为true或可迭代的数据为空,返回True.否则返回False 3.a ...

  2. [Python学习笔记-001] 内置函数getattr()

    如果某个实例foo有多个方法, 当对foo的每一个方法我们都需要使用try ... except ...进行包装的时候,内置函数getattr()可以用来精简代码. 1. getattr()的用法 # ...

  3. Python学习笔记011——内置函数exec()

    1 描述 把一个字符串当成语句执行 exec()  执行储存在字符串或文件中的 Python 语句,相比于  eval() , exec() 可以执行更复杂的 Python 代码. exec函数和ev ...

  4. Python学习笔记-常用内置函数

    输出:print() 功能:输出打印 语法:print(*objects, sep=' ', end='\n', file=sys.stdout) 参数:objects----复数,表示可以一次输出多 ...

  5. python学习笔记011——内置函数pow()

    1 语法 pow(x, y[, z]) x -- 数值表达式. y -- 数值表达式. z -- 数值表达式. 函数是计算 x 的 y 次方,如果 z 在存在,则再对结果进行取模,其结果等效于pow( ...

  6. python学习笔记013——内置函数dir()

    1 描述 dir() 函数 不带参数时,返回当前范围内的变量.方法和定义的类型列表: 带参数时,返回参数的属性.方法列表. 如果参数包含方法__dir__(),该方法将被调用. 如果参数不包含__di ...

  7. python学习笔记011——内置函数dir()

    1 描述 dir()函数可以查看(打印)对象的属性和方法.不管时那种对象(python中一切皆对象)类型(数据,模块)都有自己的属性和方法. dir() 函数不带参数时,返回当前范围内的变量.方法和定 ...

  8. 05 python学习笔记-常用内置函数(五)

    1.sorted() 函数对所有可迭代的对象进行排序(默认升序)操作 sort 与 sorted 区别: sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作. l ...

  9. Python学习笔记2—内置函数

    函数的使用 官方文档:https://docs.python.org/2/library/functions.html

随机推荐

  1. PHP 生成器Generators的入门理解和学习

    什么是生成器Generators 生成器允许你在 foreach 代码块中写代码来迭代一组数据而不需要在内存中创建一个数组, 那会使你的内存达到上限,或者会占据可观的处理时间.相反,你可以写一个生成器 ...

  2. 利用postman进行接口测试并发送带cookie请求的方法

    做web测试的基本上都用用到postman去做一些接口测试,比如测试接口的访问权限,对于某些接口用户A可以访问,用户B不能访问:比如有时需要读取文件的数据.在postman上要实现这样测试,我们就必要 ...

  3. python3爬虫-通过requests获取安居客房屋信息

    import requests from fake_useragent import UserAgent from lxml import etree from http import cookiej ...

  4. Python 开发面试题

    Python部分 将一个字符串逆序,不能使用反转函数 求从10到100中能被3或5整除的数的和 What is Python? What are the benefits of using Pytho ...

  5. js之DOM直接操作

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. saltstack(五) saltstack的state状态管理

    一,YAML语法 首先先了解一下YAML,默认的SLS文件的renderer是YAML renderer.YAML是一个有很多强大特性的标记性语言.Salt使用了一个YAML的小型子集,映射非常常用的 ...

  7. Maven学习总结(32)——Maven项目部署到Tomcat8中

    1.环境准备 Maven.Tomcat8.Eclipse 2.maven中的镜像配置 大家知道,mavne默认使用的是国外的镜像,但是速度很慢,这里建议大家使用阿里的中央仓库镜像. 阿里出品,必出精品 ...

  8. Java并发编程:线程池 - 实例

    代码块: public class test { public static void main(String[] args) { test t = new test(); ThreadPoolExe ...

  9. 【eclipse】eclipse启动优化&打印GC信息&重要的堆结构连接

    eclipse启动优化,终于不那么卡了! 网上找了好多都是myEclipse的优化的,跟eclipse有点区别,找了很多方法还是不能让这个eclipse(Version: Kepler Release ...

  10. nyoj_79_拦截导弹_201403182040

    拦截导弹 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述 某国为了防御敌国的导弹袭击,发展中一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到 ...