zoukankan      html  css  js  c++  java
  • 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. 调用函数中的参数赋值:未赋值的参数,必须有默认参数

     
  • 相关阅读:
    Ubuntu 14.04 卸载通过源码安装的库
    Ubuntu 14.04 indigo 相关依赖
    Ubuntu 14.04 indigo 安装 cartographer 1.0.0
    Ubuntu 14.04 改变文件或者文件夹的拥有者
    安装cartographer遇到Unrecognized syntax identifier "proto3". This parser only recognizes "proto2"问题
    Unrecognized syntax identifier "proto3". This parser only recognizes "proto2". ”问题解决方法
    查看所有用户组,用户名
    1卸载ROS
    Ubuntu14.04 软件安装卸载
    Ubuntu14.04系统显示器不自动休眠修改
  • 原文地址:https://www.cnblogs.com/kite123/p/11655874.html
Copyright © 2011-2022 走看看