python之函数

I. 常见的函数

长度 len()
数据类型 type
返回值 return 表达式:函数中没有return 或return 后面为空,返回值为None
输入 input
替换 字符串.replace("旧值","新值”,指定次数)
查找 find(字符串片段,起始位置):寻找字符串中的子字符或子字符串,找到返回索引(下标) , 找不到返回-1【从前往后找,只返回第一个位置】
随机数 random

a.随机生成0-1之间的浮点数: random.random()【范围不写,且边界值包含0,不包含1】


b.随机生成m-n之间的整数: random.randint(m,n)


c.随机生成m-n之间的小数:


思路1:先随机生成m-n之间的整数;再随机生成0-1之间的小数;将两者相加【random.randint(m,n)+random.random()】--->浮点数的精度不准确

思路2:导入decimal模块,解决浮点数运算的精度问题

查找元素的个数 count()
将字母转为大写 字符串.upper()
将字母转为小写 字符串.lower()
获取数据内存地址 id(data)
数据统计 min:求最小值 max:求最大值 sum:求和
识别字符串中的python表达式 eval(字符串)
s1 = "[11,22,33]"
print(eval(s1)) # [11,22,33]
聚合打包 zip(以最短的为标准)

列表转成列表元组形式 : list(zip(list1,list2))
列表转成字典形式 : dict(zip(list1,list2)) 【list1为键,list2为值 】

li = ["name","age","gender"]
li2 = ["timer",17,""]
res = list(zip(li,li2)) # 转成列表-元组形式
res2 = dict((zip(li,li2))) # 转成字典形式
print(res,type(res)) # [('name', 'timer'), ('age', 17), ('gender', '女')] <class 'list'>
print(res2,type(res2)) # {'name': 'timer', 'age': 17, 'gender': '女'} <class 'dict'> 
 获取列表/字符串/元组/每个元素和对应的下标

enumerate()返回[(下标1,元素1),(下标2,元素2)]

s = "sfsdgfsk"
li2 = enumerate(s)  # [(0, 's'), (1, 'f'), (2, 's'), (3, 'd'), (4, 'g'), (5,'f'), (6, 's'), (7, 'k')] 

 

过滤器函数

filter(规则函数,数据)

datas = [
 {'case_id': 1, 'case_title': '用例1', 'url': 'www.baidu.com', 'data': '001','expect': 'ok'},
 {'case_id': 2, 'case_title': '用例2', 'url': 'www.baidu.com', 'data': '002','expect': 'ok'}]

def fun(data):
    return data['case_id']>1


data = filter(fun,datas)
print(list(data))
# 等效于data = filter(fun,datas)

list3 =[]
for i in datas:
  result = fun(i)
  list3.append(i)
去空格

去首尾空格:strip(),去左空格:lstrip() ,去右空格:rstrip()

 

II.函数的规范

(1)小写字母分开,不能以数字开头,不同的字母之前用下划线隔开

(2)特点:可重复使用

III. 定义函数

(1)定长参数 : def 函数名(参数名1,参数名2...)

def make_sandwich(a,b):
    print("你的三明治包含了{0}{1}".format(a,b))

make_sandwich('生菜','鸡蛋')

(2)动态参数 : def 函数名(*args) 【传入的值必须是元组,arg:argument 】

def make_sandswich1(*args):
    print("你的三明治包含了{}".format(args))
make_sandswich1('生菜','鸡蛋','培根','蟹棒') # 你的三明治包含了('生菜', '鸡蛋', '培根', '蟹棒')


def make_sandswich2(*args):
    all = ''
    for item in args:
        all += item
        all += ''
    print("你的三明治包含了{}".format(all))
make_sandswich2('生菜','鸡蛋','培根','蟹棒') # 你的三明治包含了生菜、鸡蛋、培根、蟹棒、

(3)关键字参数 : def 函数名(**kwargs) 【传入的值为字典:key = key1,value = value1 】

def kw_function(**kwargs):
    print("{}".format(kwargs))

kw_function(x='1',y='2')

def add_all_num(b=7,*L,a):
    sum = 0
    for item in L:
        sum += item
    print('b的值', b)
    print('和为',sum)
    print('a的值',a)

add_all_num(1,5,10,79,a=7)

(4) 必需参数 : def 函数名(a,b) 【 定义了几个,就传入几个 】

(5) 默认参数 : 定义的时候给参数设置默认值 【 调用时可以不传值,若传值则使用传入值 】:

注意1:默认参数必须放在位置参数(形参)后面

注意2:调用函数中的参数赋值,若部分赋值,add(100,k=3)【前提:未赋值的参数,必须有默认参数】

 

IV. 调用函数

(1)位置参数:通过位置传递参数(按顺序传递,第一个实参,传给第一个形参)

(2)关键字传参:通过参数名指定传给某个参数(传参的时候,不考虑参数的位置关系)

def num(a,b):
    pass

num(1,2) # 传入的参数是实参--->位置参数
num(a=1,b=2) # 关键字参数

V. 调用函数参数拆包(参数和值必须对等)

(1) 拆元组,列表*

def func(a,b,c):
      pass

data = [11,22,33]
func(*data) # ====>func(11,22,33) a=11,b=22,c=33

(2)拆字典**

dic = {"a":11,"b":22,"c":44}
func(**dic) # ======>func(a =11,b=22)

VI.变量

(1)全局变量 : 模块里面都能用 ,声明全局变量 -- global 变量名
(2)局部变量 : 函数的局部变量只能用于函数

注意1:函数内部如果要修改全局变量,先声明全局变量global,重新赋值

注意2: 当全局和局部变量同名且同时存在时,函数优先调用局部变量 ;当局部变量没有时,用全局(由内到外)

例如:区分全局变量与局部变量

a = 1 #全局变量
def add(b):
    a = 5 # 局部变量
    print(a+b)
add(10) #10+a=5
print(a) #1

例如:global声明全局变量

a = 1 #全局变量
def add(b):
    global a #声明这是一个全局变量
    a = 10
    print(a+b)
add(10) #10+a=5
print(a) #10,相当于给a=1再次赋值a=10
VII.反射(动态属性设置)

 (1)setattr(类对象名,属性名(字符串类型),赋值) : 修改类对象的属性

  • 可以替代init(初始化方法),如果属性名变化的情况下,推荐用setattr
 
class GetData: 
    cookies = '小刘'
    
setattr(GetData,'cookies','小花')
print(GetData.__dict__)


# 等效写法
class CaseData:
    pass

def work(data):
        # 创建一个新list
        new_data = []
        # 遍历列表
        for i in data:
            # 每条用例,创建一个对象
            case = CaseData()
            # 遍历当前字典所有数据
            for k, v in i.items():
                setattr(case,k,v)
            # 将设置好数据的对象,加入到列表中
            new_data.append(case)
        return new_data

data = [{'case_id': 1, 'case_title': '用例1', 'url': 'www.baidu.com', 'data': '001', 'expect': 'ok'},{'case_id': 2, 'case_title': '用例2', 'url': 'www.baidu.com', 'data': '002', 'expect': 'ok'}]

data = work(data)
print(data)

(2) getattr(类对象名,属性名) : 获取类对象的属性值

class GetData: 
    headers = {'X-Lemonban-Media-Type': 'lemonban.v2','Content-Type': 'application/json; charset=UTF-8','Authorization':None}
    
getattr(GetData,'headers')

(3) hasattr(类对象名,属性名) : 判断是否有类属性,有返回True

hasattr(GetData,'cookies')

(4)delattr(类对象名,属性名) : 删除类属性

delattr(GetData,'cookies')

注意: 获取对象的属性,字典格式值返回 --》 对象名._ _dict _ _ 

  A.【def 函数名[参数]中的参数】:默认参数必须放在位置参数(形参)后面

  B. 调用函数中的参数赋值:未赋值的参数,必须有默认参数

 
posted @ 2019-10-11 18:02  鲲尘轻杳  阅读(294)  评论(0编辑  收藏  举报