Python基础

python解释器:用来执行.py文件

    CPython:官方的
    IPython:基于CPython的交互式解释器
    PyPy:采用JIT技术,对Python代码进行动态编译,显著提升代码的执行速度
    Jython:Java平台上的Python解释器,可以直接把Python代码编译成java字节执行
    IronPython:运行在.Net平台上的Pythone解释器,把代码翻译成.Net字节码
 
在mac和linux上直接执行.py文件,只需要在第一行添加:
     #!/usr/bin/env python3
    print('hello, world')
输入和输出:
     print('hello world')
     name=input('input your name: ')
     print('hello', name)
     input()返回的数据类型是str
格式:Python采用缩进来组织代码块,大小写敏感,坚持使用4个空格的缩进
 
数据类型:
     整数:整数运算永远是精确的 地板除// 求余数% 没有大小限制
     浮点数:没有大小限制 超出一定范围直接表示为inf(无限大)
     字符串:单引号 双引号 转义字符 r默认不转义 '''...'''表示多行内容
         int(str):将str转为int
         ord():字符->整数编码
         chr():整数编码->字符
         前缀b:对应的bytes
         encode():str转为指定编码格式的bytes
         decode():bytes转为str,网络或磁盘上读取的bytes,通过此方法转为str,可以使用参数errors='ignore'来忽略无法转换的部分
         len():str的字符数,或bytes的字节数
         格式化字符串:
             和c一样的占位符规则,%s % %f %x,整数和浮点数可以手动指定位数,%%表示%
             format():使用{x}占位符,和c#有点类似
     bool: True False and or not
     空值:None
     变量:动态语言,类型不固定(静态语言:变量类型固定的语言)
     常量:约定全部大写的变量表示常量
 
字符编码:
    ASCII:一个字节表示,127个字符
    GB2312:中文编码,而且不和ASCII冲突
    Unicode:把所有语言统一到一套编码里,通常2字节,特殊多个字节
    UTF-8:可变长编码,将Unicode编码成1-6个字节,以节省空间
    内存:统一使用Unicode编码
    存储或传输:UTF-8编码
    Python3中,字符串是以Unicode编码的,如果需要网络传输或保存磁盘,需要手动转为字节bytes
    坚持使用UTF-8对str和bytes进行转换
    Python源文件保存为UTF-8格式,Encoding in UTF-8 without BOM
    为了让python解释器按照UTF-8读取,通常在文件开头处添加:   
     #!/usr/bin/env python3
     # -*- coding: utf-8 -*-
         第一行:告诉Linux/OS Xx系统,这是一个Python可执行文件
         第二行:告诉解释器使用UTF-8编码格式读取
    
使用list和tuple:
    list:有序列表 []
         len(lst):获取元素个数
         append(arg):末尾追加元素
         insert(i, arg);位置i插入元素
         pop():删除末尾元素
         pop(i):删除第i个元素
    tuple:有序列表(),初始化后不可修改
         只有一个元素的tuple:(1,)
         使用:因为不可变,所以更安全,在没有修改需求时尽量使用tuple
          a = 1, 2, 3    // tuple,括号可以省略
 
dict和set:
    dict:字典,查找速度快,key必须是不可变对象,比如int,str
 dic = {'a':1, 'b':2, 'c':3}
 访问:
     print(dic['a'])          []访问key不存在会报错
     dic['a'] = 5
     exist = 'a' in dic
     dic.get('a')     值不存在返回None
     dic.get('a', -1) //-1表示缺省值
 删除:
      pop(key)
    set:不重复集合,原理和dict一样,但不存储value,也要求存放不可变对象
add(key):添加已有元素无效
remove(key)       
 
条件判断:计算机之所以能做很多自动化的任务,因为它可以自己做条件判断
if cond1:
      do1
elif cond2:
      do2
elif cond3:
      do3
else:
      do4
 
循环:让计算机能够做重复运算
    for循环:
 遍历list或tuple:
       for name in names:
           print(name)
 遍历dict:
      for key in d:
           print(key)
      for value in d.values():
           print(value)
      for k,v in d.items()
           print("key {} value {}".format(k, v))
           print(k, v)
    range(n):生成0到n的整数序列
         list(range(n))
    while循环:
         while cond:
              do
          break
          continue
    
函数:是一种最基本的代码抽象
    数据类型转换:
          int() float() str() bool() hex()
    函数别名:函数名其实就是指向一个函数对象的引用
    函数定义:
         def func(args):
              ...
    导入别的python文件中的函数:
    from filename import functionName 
    空函数:用来表示函数占位符,pass表示什么也不做
         def func():
              pass
    参数检查:isinstance
        if not isinstance(x, (int, float)):
            raise TypeError('bad operand type') 
    多返回值函数:其实是返回一个tuple
    参数:
         位置参数:普通必传参数
         默认参数:必须指向不变对象
         可变参数:传入0个或任意个参数,自动组装成一个tuple
             def func(*args):
                  ...
             定义的时候,参数前面加*
             函数调用时,在list或dict前面加个*可以自动转为可变参数传进去
         关键字参数:传入0个或任意个参数,自动组装成一个dict
               def func(**kw):
                   ...
              定义的时候,参数前面加**
              函数调用时,在dict前面加**可以自动生成dict的拷贝传进函数,而且不会影响原有的dict
          命名关键字参数:
              def func(arg1, arg2, *, namedArg1, namedArg2)
                   namedArg1和namedArg2需要带着参数名和值传递
              def func(arg1, arg2, *args, namedArg1, namedArg2)
                  如果前面有一个可变参数,则可省略前面的*
              可以提供默认参数值
         参数组合顺序:必选参数 默认参数 可变参数 命名关键字参数 关键字参数
 
递归函数:
    放置递归调用太深导致栈溢出,因为每次函数调用都会增加一层栈溢,返回时减少,但栈的大小是有限的。
    尾递归:return时只调用函数本身,没有其他任何计算
    python的标准解释器没有针对尾递归做优化,所以还是会栈溢出
    
高级特性:
    切片:相当于字符串截取函数
         L[0:3] 取0-3(不包括3)的元素
         L[:10:2] 前10个每2个取一个
         L[::5] 所有元素每5个取一个
         L[:] 直接复制一个list
         tuple切片的结果仍是tuple
         str切片的结果仍是str
         有了切片操作,很多地方的循环就不再需要了
    迭代:任何可迭代对象都可以用作for循环,包括自定义数据类型
         判断一个对象是否是可迭代的:
from collections import Iterable
print(isinstance('abc', Iterable))
    列表生成式:可以快速生成list,可以通过一个list推导出另一个list,代码十分的简洁
list[range(1, 11)]
[x * x for x in range(1, 11)]
[x * x for x in range(1, 11) if x % 2 == 0]
import os
[d for d in os.listdir('.')]
[k + '=' + v for k,v in dict.items()]
[s.lower() for s in lst]
    生成器:generator
         定义:把列表生成式的[]换成()即可
         含义:generator存储的是算法,调用next(g)会动态计算出下一个元素
         用法:使用for循环访问,一般不使用next(g)函数
         yield:如果一个函数定义包含yield关键字,则这个函数就是一个generator
         普通函数返回结果,generator函数,返回的是一个generator对象
 def odd():
    print("first")
    yield 1
    print("second")
    yield 3
    print("third")
    yield 5
     迭代器:Iterable和Iterator
         Iterable:可迭代对象,就是能被for循环的数据类型:
              (1)集合数据类型,list tuple dict set str
              (2)generator,包括生成器和带yield的generator function
         Iterator:可以被next()函数调用并不断返回下一个值的对象
              Iterator是一个惰性计算的序列,可以表示无限大的序列
              集合类型可以通过iter()函数转化为Iterator对象
 L = [1, 2, 3]

 for v in L:
 print(v)

 it = iter(L)
 while True:
    try:
        print(next(it))
    except StopIteration:
        break
  
函数式编程:
    
 
 删除目录:
import os
import shutil

os.remove(path)   #删除文件
os.removedirs(path)   #删除空文件夹

shutil.rmtree(path)    #递归删除文件夹
 
pip:
pip install xxx:
  安装xxx
  再次数据上述命令,可以查看安装目录
pip freeze:
  已经装了哪些库
python -m pip install --upgrade pip
  pip升级

 

 
 
 
posted @ 2016-04-08 16:36  斯芬克斯  阅读(1689)  评论(0编辑  收藏  举报