zoukankan      html  css  js  c++  java
  • Python进阶——笔记1

    1、*args 的用法

    *args 和 **kwargs 主要用于函数定义。 你可以将不定数量的参数传递给一个函数。

    这里的不定的意思是:预先并不知道, 函数使用者会传递多少个参数给你, 所以在这个场景下使用这两个关键字。 *args 是用来发送一个非键值对的可变数量的参数列表给一个函数.

    def test_var_args(f_arg, *argv):
        print("first normal arg:", f_arg)
        for arg in argv:
            print("another arg through *argv:", arg)
    
    test_var_args('yasoob', 'python', 'eggs', 'test')

    2、**kwargs 的用法

    **kwargs 允许你将不定长度的键值对, 作为参数传递给一个函数。 如果你想要在一个函数里处理带名字的参数, 你应该使用**kwargs

    def greet_me(**kwargs):
        for key, value in kwargs.items():
            print("{0} == {1}".format(key, value))
    
    
    >>> greet_me(name="yasoob")
    name == yasoob

    使用 *args 和 **kwargs 来调用函数

    def test_args_kwargs(arg1, arg2, arg3):
        print("arg1:", arg1)
        print("arg2:", arg2)
        print("arg3:", arg3)
    # 首先使用 *args
    >>> args = ("two", 3, 5)
    >>> test_args_kwargs(*args)
    arg1: two
    arg2: 3
    arg3: 5
    
    # 现在使用 **kwargs:
    >>> kwargs = {"arg3": 3, "arg2": "two", "arg1": 5}
    >>> test_args_kwargs(**kwargs)
    arg1: 5
    arg2: two
    arg3: 3

    标准参数与*args、**kwargs在使用时的顺序

    some_func(fargs, *args, **kwargs)

    3、调试(Debugging)

    利用好调试,能大大提高你捕捉代码Bug的。大部分新人忽略了Python debugger(pdb)的重要性。 在这个章节我只会告诉你一些重要的命令,你可以从官方文档中学习到更多。

    译者注,参考:https://docs.python.org/2/library/pdb.html Or https://docs.python.org/3/library/pdb.html

    从命令行运行

    你可以在命令行使用Python debugger运行一个脚本, 举个例子:

    $ python -m pdb my_script.py
    

    这会触发debugger在脚本第一行指令处停止执行。这在脚本很短时会很有帮助。你可以通过(Pdb)模式接着查看变量信息,并且逐行调试。

    从脚本内部运行

    同时,你也可以在脚本内部设置断点,这样就可以在某些特定点查看变量信息和各种执行时信息了。这里将使用pdb.set_trace()方法来实现。举个例子:

    import pdb
    
    def make_bread():
        pdb.set_trace()
        return "I don't have time"
    
    print(make_bread())
    

    试下保存上面的脚本后运行之。你会在运行时马上进入debugger模式。现在是时候了解下debugger模式下的一些命令了。

    命令列表:
    • c: 继续执行
    • w: 显示当前正在执行的代码行的上下文信息
    • a: 打印当前函数的参数列表
    • s: 执行当前代码行,并停在第一个能停的地方(相当于单步进入)
    • n: 继续执行到当前函数的下一行,或者当前行直接返回(单步跳过)

    单步跳过(next)和单步进入(step)的区别在于, 单步进入会进入当前行调用的函数内部并停在里面, 而单步跳过会(几乎)全速执行完当前行调用的函数,并停在当前函数的下一行。

    4、Map,Filter 和 Reduce

    Map,Filter 和 Reduce 三个函数能为函数式编程提供便利

    map

    Map会将一个函数映射到一个输入列表的所有元素上。

    items = [1, 2, 3, 4, 5]
    squared = []
    for i in items:
        squared.append(i**2)
    
    #map
    items = [1, 2, 3, 4, 5]
    squared = list(map(lambda x: x**2, items))

    大多数时候,使用匿名函数(lambda)来配合map

    filter

    filter过滤列表中的元素,并且返回一个由所有符合要求的元素所构成的列表,符合要求即函数映射到该元素时返回值为True. 

    number_list = range(-5, 5)
    less_than_zero = filter(lambda x: x < 0, number_list)
    print(list(less_than_zero))  
    # 译者注:上面print时,加了list转换,是为了python2/3的兼容性
    #        在python2中filter直接返回列表,但在python3中返回迭代器
    #        因此为了兼容python3, 需要list转换一下
    
    # Output: [-5, -4, -3, -2, -1]

    reduce

    当需要对一个列表进行一些计算并返回结果时,Reduce 是个非常有用的函数

    from functools import reduce
    product = reduce( (lambda x, y: x * y), [1, 2, 3, 4] )
    
    # Output: 24

    5、set(集合)数据结构

    set(集合)是一个非常有用的数据结构。它与列表(list)的行为类似,区别在于set不能包含重复的值。

    例如你可能想检查列表中是否包含重复的元素

    some_list = ['a', 'b', 'c', 'b', 'd', 'm', 'n', 'n']
    duplicates = set([x for x in some_list if some_list.count(x) > 1])
    print(duplicates)
    ### 输出: set(['b', 'n'])

    交集

    valid = set(['yellow', 'red', 'blue', 'green', 'black'])
    input_set = set(['red', 'brown'])
    print(input_set.intersection(valid))
    ### 输出: set(['red'])

    差集

    valid = set(['yellow', 'red', 'blue', 'green', 'black'])
    input_set = set(['red', 'brown'])
    print(input_set.difference(valid))
    ### 输出: set(['brown'])

    6、三元运算符

    伪代码

    #如果条件为真,返回真 否则返回假
    condition_is_true if condition else condition_is_false
    is_fat = True
    state = "fat" if is_fat else "not fat"

    返回x的绝对值:

    number=(input('please enter a number:'))
    try:
        number=int(number)
        result=( (number) if number>0 else (number*-1) )
    except:
        result='something wrong happened!'
    print(result)

    7、Global和Return

    global变量意味着我们可以在函数以外的区域都能访问这个变量

    # 首先,是没有使用global变量
    def add(value1, value2):
        result = value1 + value2
    
    add(2, 4)
    print(result)
    
    # Oh 糟了,我们遇到异常了。为什么会这样?
    # python解释器报错说没有一个叫result的变量。
    # 这是因为result变量只能在创建它的函数内部才允许访问,除非它是全局的(global)。
    Traceback (most recent call last):
      File "", line 1, in
        result
    NameError: name 'result' is not defined
    
    # 现在我们运行相同的代码,不过是在将result变量设为global之后
    def add(value1, value2):
        global result
        result = value1 + value2
    
    add(2, 4)
    print(result)
    6

    8、虚拟环境(virtualenv)

    使用virtualenv!针对每个程序创建独立(隔离)的Python环境,而不是在全局安装所依赖的模块。

    要安装它,只需要在命令行中输入以下命令:

    $ pip install virtualenv

    最重要的命令是:

    $ virtualenv myproject
    $ source bin/activate

    执行第一个命令在myproject文件夹创建一个隔离的virtualenv环境,第二个命令激活这个隔离的环境(virtualenv)。

    如果你想让你的virtualenv使用系统全局模块,请使用--system-site-packages参数创建你的virtualenv,例如:

    virtualenv --system-site-packages mycoolproject

    使用以下命令可以退出这个virtualenv:

    $ deactivate
  • 相关阅读:
    利用requests, beautifulsoup包爬取股票信息网站
    Mac自带编码转换工具iconv
    Flask 快速入门
    HTML模版组件
    JavaScript正则表达式及jQuery回顾
    jQuery 教程
    Document
    Document
    Document
    Document
  • 原文地址:https://www.cnblogs.com/lovephysics/p/7227522.html
Copyright © 2011-2022 走看看