【python】基础笔记

一、python位置信息

下面以MacOS为例

系统自带(2.7)

  1. home:/System/Library/Frameworks/Python.framework/Versions/2.7
  2. 自带lib: /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7
  3. 三方lib: /Library/Python/2.7/site-packages

xcode命令行工具(3.7)

  1. home: /Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.7
  2. 自带lib: /Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.7/lib/python3.7/
  3. 三方lib:/Library/Python/3.7/site-packages 或者
    /Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.7/lib/python3.7/site-packages

homebrew下载(3.8)

  1. home: /usr/local/Cellar/python@3.8/3.8.5/Frameworks/Python.framework/Versions/3.8
  2. 自带lib: /usr/local/Cellar/python@3.8/3.8.5/Frameworks/Python.framework/Versions/3.8/lib/python3.8
  3. 三方lib:/usr/local/lib/python3.8/site-packages

二、python基础

命名和包

  • 变量名、函数名、包名或者文件名(模块名)用下划线命名法。
  • 类名使用大驼峰命名法。
  • 包使用__init__.py来表示,
  • PYTHONPATH自动包含执行文件所在的路径。例如执行python /a/b/c.py,PYTHONPATH会自动增加/a/b这个路径。

PEP

学习Python,怎能不懂点PEP呢?

PEP官网

PEP的全称是Python Enhancement Proposals,比较常见的翻译是Python增强提案或Python改进建议书。PEP分成三类:

  • I - Informational PEP
  • P - Process PEP
  • S - Standards Track PEP

下划线

python下划线的5种含义

_var:受保护属性或函数,不建议外部访问;同时无法通过from somemodule import *导入
__var:私有属性或函数,解释器会进行命名修饰(name mangling)
__var__:魔术属性或函数,是由python定义的,个人不要这样命名

行拼接

# 隐式行拼接
>>> a = ('1'+'2'+
...      '3'+'4')
... 
>>> a
'1234'

# 显示行拼接
>>> b = '1'+'2' + \
...     '3'+'4'
>>> b
'1234'

requirements.txt

  1. 作用:管理python的依赖模块 (类比pom.xml)

  2. 格式:

    alembic==1.0.10
    appnope==0.1.0
    astroid==2.2.5
    ...
    
  3. 安装依赖:pip3 install -r requirements.txt

  4. 写入依赖:pip3 freeze > requirements.txt

yield

把一个函数变成一个 generator,带有 yield 的函数不再是一个普通函数,Python 解释器会将其视为一个 generator。 runoob

iterable v.s. iterator v.s. generator

stackoverflow: iterable v.s. iterator v.s. generator

一个iterator永远是一个iterable;for循环可迭代的是iterable,它会自动应用iter函数;调用生成器函数可以返回generator;generator是一个iterator

Generator --is–> Iterator --is–> Iterable

  • 实现__iter__魔术方法的类实例化后是一个iterable对象,对该对象调用iter函数可获得iterator
  • 实现__next__魔术方法的类实例化后是一个iterator对象,对该对象调用next函数可进行迭代
  • 包含yield关键词的函数或方法调用后可以返回一个generator,对该对象调用next函数或者调用该对象的send方法可以进行迭代

json

  • 中文乱码

    import json
    	  
    json.dumps(dic, ensure_ascii=False)
    
  • 格式化

    import json
    	  
    json.dumps(dic, indent=2)
    

字符串处理

字符串前缀

  • f(format):自动替换变量

    name = 'hch'
    age = 18
    print(f'My name is {name}, {age} years old.')
    
  • r(raw):所有字符都是字面含义,不转义

    print(r'\n')
    
  • b(bytes):字符串转为字节,只能包含ASCII字符

    print(b'abc'.decode('utf-8'))
    # print(b'中')  # SyntaxError: bytes can only contain ASCII literal characters.
    
  • u(unicode):python3默认为Unicode,可以忽略

    print(u'中')
    

字符串去除空白符

  • strip()同时去掉左右两边的空格
  • lstrip()去掉左边的空格
  • rstrip()去掉右边的空格

字符串包含

  • in操作符
  • find()/rfind()是否返回-1
  • index()/rindex()是否抛出ValueError异常
  • count()是否>0

字符串格式化

字符串格式化的演进之路

  • %操作符

    print('%s is %d in digital, %x in hex, %o in octal' % ('eleven', 11, 11, 11))
    
  • format(),性能最差

    print("My name is {} and i'm {} years old.".format(name, age))
    
  • f字符串前缀(变量插值),性能最好

    print(f"My name is {name} and i'm {age} years old.")
    

输出对齐

  • format()
    print('{0:^20s}:{1:s}'.format(k, str(v))) 
    # 填充与格式化::[填充字符][对齐方式 < ^ >][宽度][进制/精度/类型]
    
  • ljust()/rjust()
    print(k.ljust(w), ':', v)
    # just第二个参数可以指定填充字符,默认为空白符
    

系统相关

  • 时间

    import time
    
    t = time.time()
    
    print(t)                       #原始时间数据
    print(int(t))                  #秒级时间戳
    print(int(round(t * 1000)))    #毫秒级时间戳
    print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))  # 格式化时间
    
  • 执行系统命令

    import subprocess
    
    # cwd指定执行命令的所在路径
    p=subprocess.Popen('scrapy crawl knowledge_base_spider --logfile test.log'.split(),cwd='./mobile_game')
    
    # pid为执行进程的ID号,poll方法可以轮询该进程是否结束(未结束返回None,否则返回return code)
    print(p.pid, p.poll())
    
    # 杀死进程
    p.kill()
    
    # 发送中断信号
    p.send_signal(2)
    
    # 等待进程结束返回return code
    p.wait()
    
  • 获取当前进程id

    import os
    os.getpid()
    # 16895
    
    type(os.getpid())
    # <class 'int'>
    
  • 获取执行脚本路径

    import os
    
    # 脚本路径
    print(__file__)
    
    # 脚本所在目录
    print(os.path.dirname(__file__))
    
    # 脚本所在上上级目录
    print(os.path.abspath(os.path.join(__file__, '../..')))
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值