首页 > 技术文章 > python 基础

Pythonzrq 2019-08-12 09:12 原文

语言类型:

分类:编译型、解释型,强类型、弱类型

编译型:编译完在执行

  代表语言:C,C++
  优点:运行速度快
  缺点:开发速度慢


解释型:逐行编译

  优点:开发速度快

  缺点:运行速度慢

  代表语言:Python,JavaS,PHP

 

 

 

编码:


  8bit = 1byte 1024B(byte) = 1KB 1024KB = 1M
  ASCII: 英文编码 英文一个字节
  GBK : 国标码 英文 一个字节,中文两个两个
  Unicode: 万国码 英文两个 个字节, 中文四个字节
  UTF-8 : 万国码升级 英文一个字节, 欧洲两个字节,中文三个字节

 

python2和python3区别:

  代码: python2 代码混乱,重复 python 源码规范,清晰,简单优美

  编码: python2 编码为ascii python3 内存编码为Unicode

  print: python2 中print不需要添加括号 python3 中需要添加括号了

  input: python2 中输入是raw-input python3 中是input

  nonload: python2 中没有nonload python3 中新加入的

  类: python2 经典类,深入优先 python3 不存在经典类,都是新式类,mro算法也叫c3

 

 

变量

规范

  组成下划线数字字母

  首字母不能是数字

  不能是关键字

  不能使中文

  有描述性

  推荐驼峰体

  下划线

 

基础数据类型:

 

字符串:str

  upper,lower,startwith,endswith,replace,strip,split,join,count,isdigit,index/find(不报错)


列表:list

  append,insert,extend,pop,remove,del,改:li[] = "海洋" 查:根据索引,切片查询

count,index,sort,reverse

  列表的注意事项:

  循环一个列表时,删除元素时,剩下的值会向前近一步 (索引也会更改),
  不要改变列表的大小,这样会影响你最终结果

 

  列表去重:

    方法一:
      创建新的列表,for循环列表中每个元素是否不在新列表中,不在则追加

    方法二:

    

l1 = [33,22,33,44,44,22,55,11]
l2 = list(set(l1))                 #set去重转成列表
l2.sort(key = l1.index)             #使用列表进行排序,保证原顺序
print(l2)

 

  列表删除:

    列表删除只可从后往前删除,

a = [1,2,3,4,5,6,7,8]

for i in range(len(a)-1,-1,-1):
    if a[i] > 5:
        a.pop(i)
    else:
        pass
print(a)

 

字典:dict

  增加:

    dic['name'] = ['hai'] 有则改之,无则增加 ,dic.setdefault("name","hai") 有则不变,无则增加

 

  删除:

    dic.pop('key',)

 

  修改:

    dic['name'] = 'junli'

 

  查看:

    print(dic['name'],dic.get('name') #get没有返回none,好用!!!

 

  fromkeys:

    创建空字典:dic = dict.fromkeys("可迭代对象")

 

  enumerate:

    枚举,for i in enumerate(字典): 每次循环索引位置和key

  items

    得到所有值

    d={'1':'1','2':'2','3':'3'}

    for a,b in d.items():
      print(a,b)


  update:

    dic.update('name','18') 添加
    dic.update(name = '太白金星') 更改
    dic.update([(1, 'a'),(2, 'b')]) 列表中的元祖添加到字典
    dic1.update(dic2) 更新:字典融合,有则覆盖,无则增加

 

元祖:tuple

  只读列表,不可修改

  tu1= (1) 如果元祖中只有一个元素,那么他还是本身元素

  count 统计元祖中字符出现的次数

  index 通过元素查找索引

  集合:set

 

set集合里存放的是可迭代类型


  列表去重
  交集,并集,差集(两个数据进行的操作)

 

布尔bool :

  True真 False假

 

文件操作:

 

文件操作的格式:

  with open('文件的读',encoding='utf-8') as f1:

  print(f1.read())
  with: 使用with打开文件,不用关闭文件句柄
  open: 是内置内置函数,调用操作系统的接口

  encoding:设置文件读写编码格式,默认是操作系统编码


mode操作方法:

  读取:r(默认是r) 追加:a ,写入:w 非文本文件不能指定编码:rb

  先读后写(可以追加):r+

  追加读:a+


文件句柄操作方法:

  read readline() write() read(n)按光标读 readlines()将内容聚合列表


替换文件:

# 另一种打开文件的方式: 帮助自动关闭文件;可以同时开多个文件,用逗号隔开;也可以同时操作一个文件
with open("a", mode="r", encoding="utf-8") as f,\
     open("b", mode="a", encoding="utf-8") as f1: 


import os
print(os.getcwd()) # 查看当前工作路径
os.remove() # 删除文件
os.rename() # 更改文件名.(新名,旧名)

 

Python 中的空间和作用域:

三个空间:

  内置名称空间:当你运行python程序,会开启一个内置名称空间,将内置函数print等等加载到空间中

  全局名称空间:加载当前py文件中的变量,和函数外声明的变量,加载到全局空间中,变量与值对应关系

  局部名称空间:函数执行时,会开辟出局部空间(也叫临时名称空间)

 

globals() 查看全局存储的全局变量

locals() 查看当前存储的变量

 

全局作用域---->内置名称空间和全局名称空间

局部作用域---->局部名称空间

作用:

作用域对与变量而言,声明变量在程序里可使用的范围

局部作用域可以引用全局作用域变量,局部作用域不能改变全局变量

 

加载顺序:
  内置--->全局--->局部 (从外到内)
取值顺序:
  就近原则LEGB

 

同一代码块:

优点:

  能够进行复用,提高一些字符串,这样在数字处理时间和空间上提升性能,节省内存


适用对象:
  列表,字典,可变的数据类型不会复用的
  int:任何数字在同一代码块下都会复用
  str:几乎所有的字符串都会符合缓存机制

 不同代码块:

小数据池规则:
  小数据池,是不同代码块下的缓存机制,也叫缓存机制和驻留机制,在编程语言当中都有类似的东西
  主要是用于提高效率数字类型在时间和空间上的性能,避免创建重复的数据,节省内存


缓存规则:
  int:-5-256整数进行缓存,当你将整数赋值给变量时,直接引用已经创建好的缓存对象
  str:
    1.字符串在做乘法(乘法不为1)的时候长度不能超过20
    2.自己定义的字符串长度不限制,字符串必须是字母,数字,下划线组成
    3.特殊字符定义1个的时候,进行驻留

 

运算符:


算数运算符:
  * / 加减乘除 %取余 2**4 幂 //整除返回的部分
比较运算符:
  == 等于 !+ 不等于 >= 大于等于 <= 小于等于
逻辑运算符:
  顺序:not >>> and >>> or
  x and y x 为真返回y x为假返回x
  x or y x为真返回x x 为假返回y
  not x x为真返回假 x为false返回true

    

深浅copy:

 

浅copy:

  拷贝的数据半共享,当你浅copy一个嵌套的列表,将拷贝第一层数据会指向同一个内存地址,如果你修改数据,指向会断开,第二层数据也就是嵌套的列表他没有拷贝,元素的内存地址是共用的一个。

浅copy: list dict: 嵌套的可变的数据类型是同一个。


深拷贝:

  拷贝的数据不共享,深拷贝他会逐层判断,将不可变的数据类型指向同一个内存地址,可变的数据类型跟原列表不共用一个,元素指向的内存地址都是一样的。

深copy: list dict: 嵌套的可变的数据类型不是同一个 。

推荐阅读