zoukankan      html  css  js  c++  java
  • python 基础知识

    《A Byte of Python》中文版《 简明 python 教程》,非常简洁,有助于具有一定编程基础的人,快速了解和掌握python。

    这里的示例代码以python2为标准。

    对于很多编程语言来说,程序都必须要有一个入口,比如 C,C++,以及完全面向对象的编程语言 Java,C# 等。如果你接触过这些语言,对于程序入口这个概念应该很好理解,

    C 和 C++ 都需要有一个 main 函数来作为程序的入口,也就是程序的运行会从 main 函数开始。同样,Java 和 C# 必须要有一个包含 Main 方法的主类来作为程序入口。

    而 Python 则有不同,它属于脚本语言,不像编译型语言那样先将程序编译成二进制再运行,而是动态的逐行解释运行。也就是从脚本第一行开始运行,没有统一的入口。

    ” 

    if __name__ == '__main__' 就相当于是 Python 模拟的程序入口。Python 本身并没有规定这么写,这只是一种编码习惯。

    由于模块之间相互引用,不同模块可能都有这样的定义,而入口程序只能有一个。到底哪个入口程序被选中,这取决于 __name__ 的值。

    __name__ 是内置变量,用于表示当前模块的名字,同时还能反映一个包的结构。如果一个模块被直接运行,则其没有包结构,其 __name__ 值为 __main__

    所以,if __name__ == '__main__' 我们简单的理解就是: 如果模块是被直接运行的,则代码块被运行,如果模块是被导入的,则代码块不被运行

    1.Python是一种解释型语言.Python解释器是通过“一次执行一条语句”的方式运行程序的。Python科学计算程序员则更趋向于使用IPython(一种加强的交互式Python解释器)。

    通过使用命令%run,IPython会在同一个进程中执行指定文件中的代码。(.py文件和IPython解释器在同一目录下,或者运行时加上文件路径)

    %run hello_world.py   #out: Hello world  
    %run E:/hello_world.py   #out: Hello world 
    

      

    2.元组是一种一维的,定长的,不可变的Python对象序列。最简单的创建方式是一组以逗号隔开的值。通过调用tuple,任何序列或迭代器都可以被转换成元组。

    tup = 4,5,6     
    print tup      #(4,5,6)  
    print tuple([4,0,2])  #(4,0,2)  
    print tuple('string') #('s','t','r','i','n','g')  
    

      

    3.元组拆包可以非常轻松的交换变量名。拆包功能还可以用于元组或列表组成的序列进行迭代。元组中比较有用的方法是count(对列表也是如此),它用于用于计算指定指定值的出现次数。

    a = 5  
    b = 2  
    b,a = a,b  
    print a,b  # 2 5  
      
    seq = [(1,2,3),(4,5,6)]  
    for a,b,c in seq:  
        print a,b,c  
    # 1 2 3  
    # 4 5 6  
      
    a = (1,2,2,2,3,4,3,2)  
    print a.count(2)   #4  
    

    4.跟元组相比,列表(list)是变长的,而且其内容也是可以修改的。它通过方括号([ ])或list函数进行定义。通过append方法,可以将元素添加到列表的末尾。

    a_list = [2,3,4,None]  
    print a_list  #[2, 3, 4, None]  
    tup = ('foo','bar','baz')  
    b_list = list(tup)  
    print b_list  #['foo', 'bar', 'baz']  
      
    b_list.append('dwarf')  
    print b_list  #['foo', 'bar', 'baz', 'dwarf']  
    

      

    5.合并列表,和元组一样,用加号(+)将两个列表加起来即可实现合并。对于一个已定义的列表,可以用extend方法一次性添加多个元素。

    print [4,None,'foo'] + [7,8,(2,3)]  #[4, None, 'foo', 7, 8, (2, 3)]  
    x = [4,None,'foo']  
    x.extend([7,8,(2,3)])  
    print x  #[4, None, 'foo', 7, 8, (2, 3)] 
    

    注意:列表的合并是一种相当费资源的操作,因为必须创建一个新列表并将所有对象复制过去。而用extend将元素附加到现有列表(尤其是在构建一个大列表时)就会好很多。 

     #extend() 方法 合并速度快的多  

    everything = []  
    for chunk in list_of_lists:   #合并速度快的多  
        everything.extend(chunk)  
      
    for chunk in list_of_lists:  
        everything = everything + chunk 
    

     

    6.对于一个序列进行迭代时,常常需要跟踪当前项的索引,Python内置了一个enumerate函数,它可以返回序列的值和索引。

    i = 0  
    for value in ['aa','bb','cc']:  
        i += 1  
        print str(i) + ":" + value  
      
    for i,value in enumerate(['aa','bb','cc']):   # 0:aa  
        print str(i) + ":" + value                # 1:bb  
                                                  # 2:cc  
    some_list = ['foo','bar','baz']  
    mapping = dict((v,i) for i,v in enumerate(some_list))  
    print mapping  #{'baz': 2, 'foo': 0, 'bar': 1}  
    

     

    7.zip用于将多个序列(列表,元组)中的元素“配对”,从而产生一个新的元组列表。zip最常见的用法是同时迭代多个序列,还可以结合enumerate一起使用。

    seq1 = ['foo','bar','baz']  
    seq2 = ['one','two','three']  
    print zip(seq1,seq2) #[('foo', 'one'), ('bar', 'two'), ('baz', 'three')]  
      
    for i,(a,b) in enumerate(zip(seq1,seq2)):  #0:foo,one  
        print('%d:%s,%s'%(i,a,b))              #1:bar,two  
                                               #2:baz,three  
    

      

    8.调用列表的sort方法可以实现就地的排序。sorted函数可以将任何序列返回为一个新的有序列表。reversed用于按逆序迭代序列中的元素。

    a = [7,2,5,1,3]  
    a.sort()  
    print a #[1, 2, 3, 5, 7]  
      
    print sorted([7,1,2,6,0,3,2])   #[0, 1, 2, 2, 3, 6, 7]  
    print list(reversed(range(10))) #[9, 8, 7, 6, 5, 4, 3, 2, 1, 0] 
    

      

    9.导入工具库,dir(math)查看模块中的方法和属性。

    from some_module import f   #f直接用  
    import some_module as sm    # sm.f  
    import some_module          # some_module.f  
    

      

    10.Python用if elif else,True False首字母要大写。

    11.格式化字符串和新的方法格式化字符串。

    hw2015 = "%s %s %d"%('Hello','world',2015)  
    print hw2015   #Hello world 2015  
      
    print "{} is a {}".format("THis","string") #THis is a string  
    print "{0} can be {1}".format("strings","formatted") #strings can be formatted  
    

      

    12.range,arange,xrange比较
       range用作循环,range(10)返回一个list
       xrange也用作循环,只是xrange(10)不返回list,返回xrange对象。
       arange是numpy中的函数,生成array类型对象
     
    import numpy as np  
    print range(5)      #[0, 1, 2, 3, 4]  
    print range(1,9,2)  #[1, 3, 5, 7]  
      
    print np.arange(5)  #[0 1 2 3 4]  
      
    print xrange(5)       #xrange(5)  
    print list(xrange(5)) #[0, 1, 2, 3, 4]  
      
    for i in xrange(5):  
        print i  
    

      

    13.字典:字典(dict)可算是Python中最重要的内置数据结构,他更常见的名字是哈希映射(hash map)或关联数组。

    它是一种大小可变的键值对集,其中的键(key)和值(value)都是Python对象。用{ }或dict函数创建字典。

    d1 = {'a':'some value','b':[1,2,3,4]}  
    print d1 #{'a': 'some value', 'b': [1, 2, 3, 4]}  
    d1[7] = 'an integer'  # 添加元素  
    print d1 #{'a': 'some value', 'b': [1, 2, 3, 4], 7: 'an integer'}  
    print d1['b']  #[1, 2, 3, 4] 访问元素  
      
    del d1[7]  #删除元素  
    print d1   #{'a': 'some value', 'b': [1, 2, 3, 4]}    

    keys()和values()方法分别用于获取键和值的列表。虽然键值对没有特定的顺序,但这两个函数会以相同的顺序输出键和值:

    d1 = {'a':'some value','b':[1,2,3,4]}  
    print d1.keys() #['a', 'b']  
    print d1.values()  #['some value', [1, 2, 3, 4]]  
    

    利用update方法。一个字典可以被合并到另一个字典中:

    d1 = {'a':'some value','b':[1,2,3,4]}  
    d1.update({'c':12})  
    print d1 #{'a': 'some value', 'c': 12, 'b': [1, 2, 3, 4]}  
    

    从序列类型创建字典:

    key_list = ['a','b']  
    value_list = [1,2]  
    mapping = {}  
    for key,value in zip (key_list,value_list):  
        mapping[key] = value  
    print mapping  #{'a': 1, 'b': 2}  
    

      

    14.defaultdict:创建字典时,有时会出现字典的key不存在的异常,为此需使用if else判断一下:

    words = ['apple','bat','bar','atom','book']  
    by_letter = {}  
    for word in words:  
        letter = word[0]  
        if letter not in by_letter:  
            by_letter[letter] = [word]  
        else:  
            by_letter[letter].append(word)  
    print by_letter  #{'a': ['apple', 'atom'], 'b': ['bat', 'bar', 'book']}  
    

      

    内置的collections模块有一个叫做defaultdict的类,它可以使该过程更简单。传入一个类型或函数(用于生成字典各插槽所使用的默认值)即可创建一个defaultdict:

    words = ['apple','bat','bar','atom','book']  
    from collections import defaultdict  
    by_letter = defaultdict(list)  
    for word in words:  
        by_letter[word[0]].append(word)  
    print by_letter   
    #defaultdict(<type 'list'>, {'a': ['apple', 'atom'], 'b': ['bat', 'bar', 'book']})  
    

      

    15.列表 集合以及字典的集合表达式
       基本形式如下
       列表:list_comp = [expr for val in collection if condition]
       集合:set_comp = {expr for value in collection if condition}
       字典:dict_map = {key-expr:value-expr for value in collection if condition}
     
    strings = ['a','as','bat','car','dove','python']  
    list_comp = [x.upper() for x in strings if len(x)>2]  
    print list_comp #['BAT', 'CAR', 'DOVE', 'PYTHON']  
    set_comp = {len(x) for x in strings}  
    print set_comp  #set([1, 2, 3, 4, 6])  
    map_comp = {val:index for index,val in enumerate(strings)}  
    print map_comp  #{'a': 0, 'bat': 2, 'python': 5, 'car': 3, 'as': 1, 'dove': 4}  
    

     

    16.Python中相关的库
       Numpy ---- 数组支持
       Scipy  ----- 矩阵支持
       Matplotlib ---可视化
       Pillow ---- 图片处理      
       OpenCV ----- 视频处理
       scikit-learn ----- 机器学习
       theano ---- 深度学习(先安装c++编译器MinGW)
       keras ---- 深度学习,基于theano
       xgboost ---- 各类数据挖掘竞赛中常用的包
       Pandas是一个python库,通过数据标记和数据之间的关系来进行工作,其特点是简单直观。它非常适合用于数据分析,可以快速简单的对数据进行操作,整合以及可视化。
     
       
     
    参考: https://blog.csdn.net/qq_34264472/article/details/53158169    (感谢博主!)
  • 相关阅读:
    09.05 javascript 属性 内置属性 自定义属性 DOM文档对象模型
    09.04 javaScript Event 对象 时间的冒泡和捕获 节点 从HTML中通过id name 标签名 class 选择器 获取元素
    08.31 JavaScript 事件基础 绑定事件 解除绑定事件 this的用法 事件类型 鼠标事件 键盘事件 Event对象
    08.30 javascript BOM &DOM
    阿飞的梦境世界 2017-09-02-6-00-周六
    阿飞的梦境世界 2017-08-29-7-00-周二
    JavaScript练习题 全局变量 局部变量 作用域
    全局变量和局部变量
    return 的返回值与结束功能
    函数的调用和引用
  • 原文地址:https://www.cnblogs.com/Allen-rg/p/8873120.html
Copyright © 2011-2022 走看看