zoukankan      html  css  js  c++  java
  • 8、函数作用域

    第一题:简单题 

     1、什么是全局变量? 

     

     2、什么是局部变量?

     

     3、函数内部如何修改全局变量(如何声明全局变量 )?

     

     4、写出已经学过的所有python关键字,分别写出用途?

     

    第二题:数据转换 

    # 有一组用例数据如下:
    cases = [
    ['case_id', 'case_title', 'url', 'data', 'excepted'],
    [1, '用例1', 'www.baudi.com', '001', 'ok'],
    [4, '用例4', 'www.baudi.com', '002', 'ok'],
    [2, '用例2', 'www.baudi.com', '002', 'ok'],
    [3, '用例3', 'www.baudi.com', '002', 'ok'],
    [5, '用例5', 'www.baudi.com', '002', 'ok'],
    ]

    # 要求一:把上述数据转换为以下格式
    res1 = [
    {'case_id': 1, 'case_title': '用例1', 'url': 'www.baudi.com', 'data': '001', 'excepted': 'ok'},
    {'case_id': 4, 'case_title': '用例4', 'url': 'www.baudi.com', 'data': '002', 'excepted': 'ok'},
    {'case_id': 2, 'case_title': '用例2', 'url': 'www.baudi.com', 'data': '002', 'excepted': 'ok'},
    {'case_id': 3, 'case_title': '用例3', 'url': 'www.baudi.com', 'data': '002', 'excepted': 'ok'},
    {'case_id': 5, 'case_title': '用例5', 'url': 'www.baudi.com', 'data': '002', 'excepted': 'ok'}
    ]
    # 要求二:把上面转换好的数据中case_id大于3的用例数据获取出来,得到如下结果
    res = [
    {'case_id': 4, 'case_title': '用例4', 'url': 'www.baudi.com', 'data': '002', 'excepted': 'ok'},
    {'case_id': 5, 'case_title': '用例5', 'url': 'www.baudi.com', 'data': '002', 'excepted': 'ok'}
    ]



    """
    1207-函数作用域
    截至:12月10日 18:00 下载讨论内容展示词云
    第一题:简单题
    1、什么是全局变量?
    """
    print("在函数外面、全局范围内定义的变量,被称为全局变量")
    print("~" * 50, "上面是第一题答案", "~" * 50)
    print()
    """


    2、什么是局部变量?
    """
    print("在函数体里面定义的变量、包括参数,都被称为局部变量")
    print("~" * 50, "上面是第二题答案", "~" * 50)
    print()
    """


    3、函数内部如何修改全局变量(如何声明全局变量 )?
    """
    print("函数内部如何修改全局变量:在函数体内部使用global 变量名,然后对变量重新赋值,即可修改全局变量")
    print("""举例:
    name = 'lucky'
    def dalao():
    # global变量名,声明全局变量
    global name
    # 对全局变量重新赋值。修改值
    name = name + '彼'
    print("{} is dalao".format(name)) # 结果为 luckyboy is dalao

    print(dalao()) # 结果为None,因函数里没有return,则返回None
    print(name) # 结果为 luckyboy is dalao
    """)
    print("~" * 50, "上面是第三题答案", "~" * 50)

    """
    4、写出已经学过的所有python关键字,分别写出用途?
    """
    print("""
    已经学过的所有python关键字:
    1.set() 用途 主要作用对列表去重。
    2.dict() 用途 创建一个新的字典。
    3.help() 获取帮助信息,如果没有实参,解释器控制台里会启动交互式帮助系统。如果实参是一个字符串,则在模块、函数、类、方法、关键字或文档主题中搜索该字符串,并在控制台上打印帮助信息。如果实参是其他任意对象,则会生成该对象的帮助页
    4.min() 返回可迭代对象中最小的元素,或者返回两个及以上实参中最小的
    5.max() 返回可迭代对象中最大的元素,或者返回两个及以上实参中最大的
    6.id() 返回对象的“标识值”。该值是一个整数,在此对象的生命周期中保证是唯一且恒定的。两个生命期不重叠的对象可能具有相同的 id() 值
    7.enumerate() 返回一个枚举对象。iterable 必须是一个序列,或 iterator,或其他支持迭代的对象
    8.input() 从键盘输入一个字符串。数据类型是字符串
    9.bool() 返回一个布尔值,True 或者 False
    10.eval() eval() 函数用来执行一个字符串表达式,并返回表达式的值。可以将字符串转换为python代码执行。
    11.int() 返回一个基于数字或字符串 x 构造的整数对象,或者在未给出参数时返回 0,将数字/字符串转化为整数
    12.str() 返回一个 str 版本的 object,将数值等 转化为字符串
    13.sum() 从 start 开始自左向右对 iterable 的项求和并返回总计值.
    14.float() 返回从数字或字符串 x 生成的浮点数
    15.print() 将变量或字符串等输出到屏幕上
    16.tuple() 将一个序列转化为元祖类型
    17.format() 将 value 转换为 format_spec 控制的“格式化”表示
    18.len() 返回对象的长度(元素个数)。实参可以是序列(如 string、bytes、tuple、list 或 range 等)或集合(如 dictionary、set 或 frozen set 等)
    19.range() range 实际上是一个不可变的序列类型,生成一个范围的序列类型
    20.type() 传入一个参数时,返回 object 的类型。 返回值是一个 type 对象,通常与 object.__class__ 所返回的对象相同
    21.round() 返回 number 舍入到小数点后 ndigits 位精度的值
    22.zip() 创建一个聚合了来自每个可迭代对象中的元素的迭代器
    23.sorted() 根据 iterable 中的项返回一个新的已排序列表
    """)
    print("~" * 50, "上面是第四题答案", "~" * 50)
    print()
    """
    第二题:数据转换
    # 有一组用例数据如下:
    cases = [
    ['case_id', 'case_title', 'url', 'data', 'excepted'],
    [1, '用例1', 'www.baudi.com', '001', 'ok'],
    [4, '用例4', 'www.baudi.com', '002', 'ok'],
    [2, '用例2', 'www.baudi.com', '002', 'ok'],
    [3, '用例3', 'www.baudi.com', '002', 'ok'],
    [5, '用例5', 'www.baudi.com', '002', 'ok'],
    ]
    # 要求一:把上述数据转换为以下格式
    res1 = [
    {'case_id': 1, 'case_title': '用例1', 'url': 'www.baudi.com', 'data': '001', 'excepted': 'ok'},
    {'case_id': 4, 'case_title': '用例4', 'url': 'www.baudi.com', 'data': '002', 'excepted': 'ok'},
    {'case_id': 2, 'case_title': '用例2', 'url': 'www.baudi.com', 'data': '002', 'excepted': 'ok'},
    {'case_id': 3, 'case_title': '用例3', 'url': 'www.baudi.com', 'data': '002', 'excepted': 'ok'},
    {'case_id': 5, 'case_title': '用例5', 'url': 'www.baudi.com', 'data': '002', 'excepted': 'ok'}
    ]
    """


    def split_change():
    """
    这是一个将源数据先拆分后转换得到目标数据的函数。
    下面是解题思路:
    # 1.查看源数据为列表的相互嵌套;
    # 2.目标数据为列表里嵌套字典,仔细看目标数据,为列表[0],与列表[1:]的组合。故需要将源数据拆分为2个子列表。
    # 3.怎么将列表组合呢。百度查询的使用zip()内置函数。打印zip(a,b),得到的是[<zip object at 0x006BAE90>],
    # 4.一个与列表很像的东西,可以使用list()将其转化为列表。这样就得到元祖嵌套列表,列表嵌套列表
    # 5.怎么将元祖嵌套列表转化为字典呢。使用dict()内置函数。一个个取值4里面的元素转化。
    # 6.综上得到目标数据,需要2步,需要使用2次遍历。先写正常调用。然后封装成函数。此次不需要传递参数。函数不传参
    # 不确定结果,可以一步步print看。
    :return:
    """
    # 源数据,列表嵌套列表
    cases = [
    ['case_id', 'case_title', 'url', 'data', 'excepted'],
    [1, '用例1', 'www.baudi.com', '001', 'ok'],
    [4, '用例4', 'www.baudi.com', '002', 'ok'],
    [2, '用例2', 'www.baudi.com', '002', 'ok'],
    [3, '用例3', 'www.baudi.com', '002', 'ok'],
    [5, '用例5', 'www.baudi.com', '002', 'ok'],
    ]
    # 将源数据拆分为2个列表。第一个列表a为第一个元素,第二个列表b为剩余的元素
    a = cases[0]
    b = cases[1:]
    # print(a)
    # print(b)
    # zip()函数组合列表a,b,需要不断从b中取元素,获取b列表长度为c
    c = len(b)
    # 定义一个中间空列表d,用来接收每次list(zip(a,b))的值
    d = []
    for i in range(c):
    d.append(list(zip(a, b[i]))) # 将list(zip(a,b))后的值通过append方法添加到空列表d中。
    # print(d) # 打印出中间列表,看与目标数据的区别,继续转换
    # print(d[0]) # 取出中间列表的第一个元素与目标元素第一个元素比较,看差别
    # print(dict(d[0])) # 是目标答案的第一个元素。
    # 下面是第二部转换,定义一个空列表用来接收最终的值。
    res1 = []
    for i in range(len(d)): # 循环次数为列表d的长度。
    res1.append(dict(d[i]))
    # print(res1)
    return res1 # 使用return返回值
    # print(res1[0]) # 取出第一个元素与目标元素比较。是否一致。


    # 给与变量来接受函数的返回值并打印。
    m = split_change()
    print("要求一目标数据转换后的数据为: {}".format(m))
    print()
    """
    """

    # 下面是精简答案
    def transform(cases):
    # if type(cases) != list: # TODO 方法1判断输入的内容是否是列表

    if not isinstance(cases, list): # TODO 方法2判断类型的,常用这种方法
    print("不是list")
    return

    new_cases = []
    title = cases[0] # 取出标题

    for case in cases[1:]: # 读取除第一行下面的数据。
    dict_case = {} #
    # ['case_id', 'case_title', 'url', 'data', 'excepted'], title
    # [1, '用例1', 'www.baudi.com', '001', 'ok'], case
    for i, column in enumerate(case): # 可以同时获取索引和值,其中i为索引,column为值
    dict_case[title[i]] = column
    new_cases.append(dict_case)
    return new_cases # 返回的是一个列表,则在上面新建一个空列表。


    # if __name__ == "__main__":
    # print(isinstance(1, int)) # 返回True TODO 常用来判断一个变量是什么类型。

    def transform_zip(cases):
    if not isinstance(cases, list): # 方法2判断类型的,常用这种方法
    print("不是list")
    return
    # ['case_id', 'case_title', 'url', 'data', 'excepted'], title
    # [1, '用例1', 'www.baudi.com', '001', 'ok'], i
    # [(case_id ,1),(case_tttle,用例1)]
    new_cases = []
    title = cases[0]
    for i in cases[1:]:
    new_dict = dict(zip(title, i))
    new_cases.append(new_dict)
    return new_cases


    cases = [
    ['case_id', 'case_title', 'url', 'data', 'excepted'],
    [1, '用例1', 'www.baudi.com', '001', 'ok'],
    [4, '用例4', 'www.baudi.com', '002', 'ok'],
    [2, '用例2', 'www.baudi.com', '002', 'ok'],
    [3, '用例3', 'www.baudi.com', '002', 'ok'],
    [5, '用例5', 'www.baudi.com', '002', 'ok'],
    ]
    print(transform_zip(cases))

    # TODO 下面是zip函数的使用方法举例,zip之后,可以使用dict也可以使用list,后面项目实战经常使用
    if __name__ == '__main__':
    title = ["a","b","c"]
    value = [1,2,3]
    a = zip(title,value)
    print(dict(a))
    print(list(a))

    # TODO 一般遇到行列转换时,可以使用zip转换


    """
    # 要求二:把上面转换好的数据中case_id大于3的用例数据获取出来,得到如下结果
    res = [
    {'case_id': 4, 'case_title': '用例4', 'url': 'www.baudi.com', 'data': '002', 'excepted': 'ok'},
    {'case_id': 5, 'case_title': '用例5', 'url': 'www.baudi.com', 'data': '002', 'excepted': 'ok'}
    ]
    """


    # 目标数据为case_id大于3,是否可以排序后,切片取最后2位或前2个元素??
    # 是否可以通过判断key值来返回??添加到新的空列表
    # 是否可以通过判断key值来删除元素??
    # 方法1.通过循环遍历根据key来取值比较,将符合条件的添加到新的空列表中
    def get_item():
    """
    这是一个通过循环遍历列表嵌套字典中key的值,来比较得出预期结果的函数。
    :return:
    """
    # n = split_change()
    # print(n)
    # 将第一题的结果直接复用过来
    res1 = [
    {'case_id': 1, 'case_title': '用例1', 'url': 'www.baudi.com', 'data': '001', 'excepted': 'ok'},
    {'case_id': 4, 'case_title': '用例4', 'url': 'www.baudi.com', 'data': '002', 'excepted': 'ok'},
    {'case_id': 2, 'case_title': '用例2', 'url': 'www.baudi.com', 'data': '002', 'excepted': 'ok'},
    {'case_id': 3, 'case_title': '用例3', 'url': 'www.baudi.com', 'data': '002', 'excepted': 'ok'},
    {'case_id': 5, 'case_title': '用例5', 'url': 'www.baudi.com', 'data': '002', 'excepted': 'ok'}
    ]
    # 定义空列表用来接收符合的列表元素
    res = []
    # print(res1[0]["case_id"]) # 看取出的第一个元素是否正确
    # 循环遍历的次数为源数据的长度
    for i in range(len(res1)):
    # 判断列表元素取出的值是否符合题目要求,符合则添加到新列表,不符合则不处理。
    if res1[i]["case_id"] > 3:
    # 将符合条件的从res1列表添加到空列表res中
    res.append(res1[i])
    return res # 返回最终的res列表的值


    # 定义一个变量来接受调用函数返回的res列表,并打印
    n = get_item()
    print("要求二方法1 case_id大于3的用例数据为: {}".format(n))
    print()


    # 精简答案 todo 正确答案
    def filter(cases, id):
    new_cases = []
    for c in cases:
    if c["case_id"] > id:
    new_cases.append(c)
    return new_cases


    res1 = [
    {'case_id': 1, 'case_title': '用例1', 'url': 'www.baudi.com', 'data': '001', 'excepted': 'ok'},
    {'case_id': 4, 'case_title': '用例4', 'url': 'www.baudi.com', 'data': '002', 'excepted': 'ok'},
    {'case_id': 2, 'case_title': '用例2', 'url': 'www.baudi.com', 'data': '002', 'excepted': 'ok'},
    {'case_id': 3, 'case_title': '用例3', 'url': 'www.baudi.com', 'data': '002', 'excepted': 'ok'},
    {'case_id': 5, 'case_title': '用例5', 'url': 'www.baudi.com', 'data': '002', 'excepted': 'ok'}
    ]
    a = filter(res1, 3)
    print(a)


    # 方法2 循环取列表里的元素(字典),根据key值比较删除不符合的元祖(字典)
    def get_item2():
    """
    这是一个循环获取列表里元素(字典)比较字典key值并删除不符合要求的元素的函数。
    :return:
    """
    # 源数据
    res1 = [
    {'case_id': 1, 'case_title': '用例1', 'url': 'www.baudi.com', 'data': '001', 'excepted': 'ok'},
    {'case_id': 4, 'case_title': '用例4', 'url': 'www.baudi.com', 'data': '002', 'excepted': 'ok'},
    {'case_id': 2, 'case_title': '用例2', 'url': 'www.baudi.com', 'data': '002', 'excepted': 'ok'},
    {'case_id': 3, 'case_title': '用例3', 'url': 'www.baudi.com', 'data': '002', 'excepted': 'ok'},
    {'case_id': 5, 'case_title': '用例5', 'url': 'www.baudi.com', 'data': '002', 'excepted': 'ok'}
    ]
    # 循环遍历源数据里的元素,此处的i为一个字典
    for i in res1[:]:
    # 根据元素的key来删除
    if i["case_id"] < 4:
    # 将不符合的元素删除
    res1.remove(i)
    return res1


    accept = get_item2()
    print("要求二方法2 得出case_id大于3的用例数据为: {}".format(accept))
    print()


    # 方法3 使用匿名函数来达到目的。。。纯属百度后改编。不懂。
    def get_item3():
    """
    使用匿名函数来对列表嵌套字典进行排序。然后切片得到所需结果的函数。
    :return:
    """
    res1 = [
    {'case_id': 1, 'case_title': '用例1', 'url': 'www.baudi.com', 'data': '001', 'excepted': 'ok'},
    {'case_id': 4, 'case_title': '用例4', 'url': 'www.baudi.com', 'data': '002', 'excepted': 'ok'},
    {'case_id': 2, 'case_title': '用例2', 'url': 'www.baudi.com', 'data': '002', 'excepted': 'ok'},
    {'case_id': 3, 'case_title': '用例3', 'url': 'www.baudi.com', 'data': '002', 'excepted': 'ok'},
    {'case_id': 5, 'case_title': '用例5', 'url': 'www.baudi.com', 'data': '002', 'excepted': 'ok'}
    ]

    def get_key(x):
    for k, v in x.items():
    return v

    res = sorted(res1, key=lambda e: get_key(e))
    return res


    accept1 = get_item3()
    print("要求二方法3 得出case_id大于3的用例数据为: {}".format(accept1[-2:]))
    print("~" * 50, "上面是第五题答案", "~" * 50)
    """
    第三题:画出函数相关内容的思维导图或者笔记
    """







  • 相关阅读:
    检测一个对象方法是否存在
    非堵塞 延迟脚本 高性能
    移动开发 相关 备忘
    元素透明 渐变函数
    cookie
    media query 单位
    前端入门可参考《如何教会非计算机专业的女友写代码》
    JQ判断复选框是否选中
    聊天记录
    JS获取文本值
  • 原文地址:https://www.cnblogs.com/little-lucky/p/12989677.html
Copyright © 2011-2022 走看看