zoukankan      html  css  js  c++  java
  • python 学习笔记

    1. 没有 switch 语句,只能用 if 和 elif 来实现。

    2. while … else 语句

    3. 循环数组的例子:

       # -*- coding: UTF-8 -*-
       fruits = ['banana', 'apple',  'mango']
       for index in range(len(fruits)):
          print '当前水果 :', fruits[index]
       print "Good bye!"

    range返回一个序列的数。

    如果不需要判断索引值,可以用下面的方法:

       member = ['song','cui','ting']
       for each in member:
          print(each,len(member))

    注意,each直接是值了,如果是 dict,each 就是键值

    4. for … else  语句

    5. pass 不做任何事情,一般用做占位语句。

    6. dir() 函数不带参数时,返回当前范围内的变量、方法和定义的类型列表;带参数时,返回参数的属性、方法列表。(很实用的调试函数)

    7. python 也有 math ,但使用前需要先引入

    import math

    8. 常用的随机函数:

    random(),shuffle(lst) 

    9. 三引号允许一个字符串跨多行。PHP的是 <<<EOF EOF;

    hi = '''hi
    there'''

    10. 常用的字符串函数

    string.isnumeric()
    string.replace(str1, str2,  num=string.count(str1))
    string.find(str, beg=0, end=len(string)) - PHP是 strpos
    string.strip([obj]) - PHP 是 trim
    string.lower() - PHP 是 strtolower
    string.upper() - PHP 是 strtoupper


    11. 列表(List),相当于数组;元组相当于只读的数组

    12. 字典,相当于 JSON 对象。
         >>>dict = {'a': 1, 'b': 2, 'b': '3'}
         >>> dict['b']
         这样获取字典中的元素,而不是 dict.b
         a. 判断 key 是否存在用 in
         b. 删除 key : del dict['x']

         循环数据
         for

      注意区分字典和集合。其实集合和 list 类似,而不是和字典类似,但是集合中的元素是无序的,且会自动除去重复元素。

    13. 日期和时间

       import time
       time.time() - 时间戳
       time.localtime(time.time()) - 详细的时间
       time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())  - 格式化时间


    14. 日历(Calendar),需要用到再详细了解

    15.可更改(mutable)与不可更改(immutable)对象

    在 python 中,strings, tuples, 和 numbers 是不可更改的对象,而 list,dict 等则是可以修改的对象。

    不可变类型:变量赋值 a=5 后再赋值 a=10,这里实际是新生成一个 int 值对象 10,再让 a 指向它,而 5 被丢弃,不是改变a的值,相当于新生成了a。

    可变类型:变量赋值 la=[1,2,3,4] 后再赋值 la[2]=5 则是将 list la 的第三个元素值更改,本身la没有动,只是其内部的一部分值被修改了。

    python 函数的参数传递:

    不可变类型:类似 c++ 的值传递,如 整数、字符串、元组。如fun(a),传递的只是a的值,没有影响a对象本身。比如在 fun(a)内部修改 a 的值,只是修改另一个复制的对象,不会影响 a 本身。

    可变类型:类似 c++ 的引用传递,如 列表,字典。如 fun(la),则是将 la 真正的传过去,修改后fun外部的la也会受影响

    16.缺省参数,跟其它语言没什么区别。

    17.不定长参数。PHP是后期的版本才有这个的。

       def functionname([formal_args,] *var_args_tuple )


    18.匿名函数,很简单,只能一行。lambda [arg1 [,arg2,.....argn]]:expression

    19.变量作用域:跟 Javascript 差不多吧

    20.import 入引模块。

       from import : 从车里把矿泉水拿出来,给我
       import : 把车给我


    21.包就是文件夹,但该文件夹下必须存在 __init__.py 文件, 该文件的内容可以为空。__int__.py用于标识当前文件夹是一个包。

    22.文件操作

       fo = open("foo.txt", "w")
       print "文件名: ", fo.name
       print "是否已关闭 : ", fo.closed
       print "访问模式 : ", fo.mode
       print "末尾是否强制加空格 : ", fo.softspace


    23.面向对象

       类的构造函数:__init__

       self 代表类的实例,self 在定义类的方法时是必须有的,虽然在调用时不必传入相应的参数。

       实例化类其他编程语言中一般用关键字 new,但是在 Python 中并没有这个关键字,类的实例化类似函数调用方式。

       析构函数 __del__ ,__del__在对象销毁的时候被调用,当对象不再被使用时,__del__方法运行

       __private_attrs:两个下划线开头,声明该属性为私有,不能在类的外部被使用或直接访问。

       _foo: 以单下划线开头的表示的是 protected 类型的变量,即保护类型只能允许其本身与子类进行访问,不能用于 from module import *

    24.正则表达式

       re.match(pattern, string, flags=0)
       re.search(pattern, string, flags=0)

    正则替换:

    xml = re.sub(r"<vcpu placement='static'>(d+?)</vcpu>", "<vcpu placement='static' current='g<1>'>g<1></vcpu>", xml) 

    参考:https://www.crifan.com/python_re_sub_detailed_introduction/

    25.global 跟 PHP 的是一样的。

    26.函数可以返回多个值,这个比 PHP 方便多了。 例如下:

       import math
    
       def move(x, y, step, angle=0):
           nx = x + step * math.cos(angle)
           ny = y - step * math.sin(angle)
           return nx, ny
    
       x, y = move(100, 100, 60, math.pi / 6)


    27. 可变参数

       def calc(*numbers):
           sum = 0
           for n in numbers:
               sum = sum + n * n
           return sum


    28. 在 window 下,用 pyinstaller -F Tkint.py 生成 exe,再在组策略里设置这个 exe 运行。
        在 linux 下,用 python -m py_compile file.py 生成 pyc,这样只要是保护自己的代码。

    29. sys.argv[]是用来获取命令行参数的,sys.argv[0]表示代码本身文件路径,所以参数从1开始。

    30. 在Python中,要想引发异常,最简单的形式就是输入关键字 raise ,后跟要引发的异常的名称。
        raise Exception("Invalid level!", level)

    31. Python函数的定义必须在调用前面(函数调用函数例外),这和其它语言不一样

    32. Python中布尔值使用常量True和False来表示

    33. 如果在函数内部引用全局变量,像 PHP 一样,加上 global 或 n....

    34. 数字拼接字符串:'%s%d'%('/dev/sda',2)

    35. 异常例子:

        try:
            info = vol.info()
            total_size = info[1] + capacity
            print('total_size', total_size)
            resize_result = vol.resize(total_size)
            print('resize_result', resize_result)
            return True
        except (libvirt.libvirtError, TypeError), e:
            print(e.message)
            return False
            
        try:
            1/0
        except Exception, e:
            trace = traceback.format_exc()


    36. bytes
        如果要在网络上传输,或者保存到磁盘上,就需要把str变为以字节为单位的bytes。
        '中文'.encode('gb2312')

        # bytes object  
        b = b"example"  
    
        # str object  
        s = "example"  
    
        # str to bytes  
        bytes(s, encoding = "utf8")  
    
        # bytes to str  
        str(b, encoding = "utf-8")  
    
        # an alternative method  
        # str to bytes  
        str.encode(s)  
    
        # bytes to str  
        bytes.decode(b)  

    37. 格式化字符串

    url = '%s%s'%("http://xxx.xxx.xxx/xxx/sendsms?token=", token)
    用%%来表示一个%
    'Hello, {0}, 成绩提升了 {1:.1f}%'.format('小明', 17.125)  #'Hello, 小明, 成绩提升了 17.1%'

    38. 常量
        PI = 3.14159265359
        Python根本没有任何机制保证PI不会被改变,所以,用全部大写的变量名表示常量只是一个习惯上的用法

    39. classmates[-1] - 获取最后一个元素

        classmates.append('Adam') - 对应的 $arr[] = ''; arr.push();
        classmates.insert(1, 'Jack') - 把元素插入到指定的位置
        classmates.pop() - 要删除list末尾的元素
        classmates.pop(1) - 要删除指定位置的元素,用pop(i)方法,其中i是索引位置


    40. tuple
        另一种有序列表叫元组:tuple。tuple和list非常类似,但是tuple一旦初始化就不能修改
        暂时还没有用到这种写法,所以暂时跳过。

    41. int(s) - 和PHP是一样的用法

    42. dict 也就是对象,根据健值获取 value

        d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
        d['Michael']
        'Thomas' in d - 判断健值是否存在 (PHP 是 in_array,JS 也是 in)
        d.get('Thomas', -1) - 同上是一样的
        d.pop('Bob') - 删除 key (PHP是unset($arr['x']))


    43. set
        set和dict类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key。
        暂时觉得没什么用?

    44. 一则例子:

        >>> a = 'abc'
        >>> a.replace('a', 'A')
        'Abc'
        >>> a
        'abc'


        因为 str是不变对象,所以输出还是原来的字符串。正确写法是:

        >>> a = 'abc'
        >>> b = a.replace('a', 'A')
        >>> b
        'Abc'
        >>> a
        'abc'


    45. 关键字参数:def person(name, age, **kw)

        >>> person('Bob', 35, city='Beijing')
        name: Bob age: 35 other: {'city': 'Beijing'}
        >>> person('Adam', 45, gender='M', job='Engineer')
        name: Adam age: 45 other: {'gender': 'M', 'job': 'Engineer'}

        这个表示比较难理解,暂时跳过。

    46. 切片

        >>> L[0:3]
        ['Michael', 'Sarah', 'Tracy']
        字符串'xxx'也可以看成是一种list

    47. 判断对象是否可以迭代?

    isinstance('abc', Iterable)

    48. enumerate函数可以把一个list变成索引-元素对

        >>> for i, value in enumerate(['A', 'B', 'C']):
        ...     print(i, value)
        ...
        0 A
        1 B
        2 C

    49. map()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回.

    50. reduce把一个函数作用在一个序列[x1, x2, x3, ...]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算。

    51. python 也有闭包也有匿名函数。

    52. 装饰器.这是PHP没有直接有的概念,要好好理解才行。

    53. 偏函数也是PHP没有的概念。

    54. isinstance(b, Animal) 判断变量是否是某个类型。

    55. classmethod(类方法) 或是一个 staticmethod(静态方法),这取决于我们是否需要知道这一方法属于哪个类。由于我们已经引用了一个类变量,因此我们使用 classmethod(类方法)。

     class A(object):  
        bar = 1  
        def foo(self):  
            print 'foo'  
     
        @staticmethod  
        def static_foo():  
            print 'static_foo'  
            print A.bar  
     
        @classmethod  
        def class_foo(cls):  
            print 'class_foo'  
            print cls.bar  
            cls().foo()  
      
    A.static_foo()  
    A.class_foo() 


    56. 基本类型都可以用type()判断。

    57. 使用@property
        好像没多大的作用?
        受保护的函数

    58. Python 有多重继承。

    59. 获取路径的例子:

    path = '{0}/xmls/{1}.xml'.format(os.getcwd(), 'test')

    60. u'哈' -- u表示将后面跟的字符串以unicode格式存储

    61. t = (1,) -- Python在显示只有1个元素的tuple时,也会加一个逗号,,以免你误解成数学计算意义上的括号。

    62. 判断字典是否不存在某个 Key : if 'name' not in data

    63. False,0,'',[],{},()都可以视为假
        上面在虚拟机好像不对,if kw!={} 结果正常

    64. 三元运算:

        if __name__ == '__main__':
            a = ''
            b = 'True'
            c = 'False'
            
        #方法一:为真时的结果 if 判定条件 else 为假时的结果
        d = b if a else c
        print('方法一输出结果:' + d)
            
        #方法二:判定条件 and 为真时的结果 or 为假时的结果
        d = a and b or c
        print('方法二输出结果:' + d)
            
        #以上两种方法方法等同于if ... else ...
        if a:
            d = b
        else:
            d = c
        print('if语句的输出结果:' + d)

    65. 不同系统的差异

    Linux:  time.strftime('%Y-%m-%d %H:%i:%s',ts)
    Window: time.strftime('%Y-%m-%d %H:%M:%S',ts)

    66. py文件生成exe可执行程序

    pyinstaller -F test.py

    67. 字符串分割

    str.split(str="", num=string.count(str)).

    68. 有序字典:

    od = OrderedDict([('a', 1), ('c', 2), ('b', 3)])

    69. json.loads 和 json.dumps

    70. Python通过re模块提供对正则表达式的支持。使用re的一般步骤是先使用re.compile()函数,将正则表达式的字符串形式编译为Pattern实例,然后使用Pattern实例处理文本并获得匹配结果(一个Match实例),最后使用Match实例获得信息,进行其他的操作。

    举一个简单的例子,在寻找一个字符串中所有的英文字符:

    import re
    pattern = re.compile('[a-zA-Z]')
    result = pattern.findall('as3SiOPdj#@23awe')
    print result
    # ['a', 's', 'S', 'i', 'O', 'P', 'd', 'j', 'a', 'w', 'e']


    71. 正则查找

    match = re.search(r"root:(.+?):(d+?):(d+?):(d+?):(d+?):::", str)
    print(match.group(0,1,2,3,4,5)) 


    72. 正则替换

    match = re.match(r"^root:(.+?):(d+?):(d+?):(d+?):(d+?):::(.+?)$", shadow, re.S)
    m = match.group(1,2,3,4,5,6)
    shadow = 'root:{}:{}:{}:{}:{}:::{}'.format(cryptPassword, m[1], m[2], m[3], m[4], m[5])
    return shadow


    73. '-'.join(arr)

    74. 历遍字典类型
    #!/usr/bin/python
    dict={"a":"apple","b":"banana","o":"orange"}

    for i in dict:
            print "dict[%s]=" % i,dict[i]

    for (k,v) in  dict.items():
            print "dict[%s]=" % k,v

    75. 字符串可以通过索引的方式访问
    >>> a = 'abcdefg'
    >>> print(a[2])

    76. 字典赋值,实现是指向同一个对象
    [root@localhost Log]# python3
    >>> o = {'a':1, 'b':2}
    >>> oo = o
    >>> oo['a'] = 3
    >>> print(o,oo)
    {'a': 3, 'b': 2} {'a': 3, 'b': 2}

    这个时候,要用对象复制的方式
    #!/usr/bin/python
    # -*- coding: UTF-8 -*-
     
    dict1 =  {'user':'runoob','num':[1,2,3]}
     
    dict2 = dict1          # 浅拷贝: 引用对象
    dict3 = dict1.copy()   # 浅拷贝:深拷贝父对象(一级目录),子对象(二级目录)不拷贝,还是引用
     
    # 修改 data 数据
    dict1['user']='root'
    dict1['num'].remove(1)
     
    # 输出结果
    print(dict1) #{'num': [2, 3], 'user': 'root'}
    print(dict2) #{'num': [2, 3], 'user': 'root'}
    print(dict3) #{'num': [2, 3], 'user': 'runoob'}

    Python中通过copy模块有两种复制(深复制与浅复制)

        copy 浅复制 复制时只会复制父对象,而不会复制对象的内部的子对象。
        deepcopy 深复制 复制对象及其子对象

    77. 继承

    class Animal(object):
        def run(self):
            print('Animal is running...')

    class Dog(Animal):
        pass

    class Cat(Animal):
        pass

    78. splitlines 按照行(' ', ' ', ')分隔,返回一个包含各行作为元素的列表

    79. Python 是区分大小写的

  • 相关阅读:
    linux命令学习之:cd
    SSH原理与运用
    java遍历当前会话所有Session
    spring+quartz报错:Table 'XXXX.QRTZ_TRIGGERS' doesn't exist
    python检测编码
    python安装模块
    python网络爬虫
    系统编码 python编码
    python 中文路径
    python读取文件乱码
  • 原文地址:https://www.cnblogs.com/chy1000/p/9023076.html
Copyright © 2011-2022 走看看