• 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. 调用函数中的参数赋值:未赋值的参数,必须有默认参数

     
  • 相关阅读:
    迭代器,生成器的理解
    需求
    关于dom 0级 2级 3级事件的理解
    夯实前端基础
    前端面试题 收集
    前端易忘点,持续更新
    form target 文件上传
    ES6 symbol
    bzoj1260 [CQOI2007]涂色paint
    bzoj1083 [SCOI2005]繁忙的都市
  • 原文地址:https://www.cnblogs.com/kite123/p/11655874.html
Copyright © 2020-2023  润新知