Python 学习笔记_基础记录

这篇博客详细记录了Python编程的基础知识,包括语法、数据类型、控制结构、函数等内容,适合初学者入门学习。
摘要由CSDN通过智能技术生成
import functools
import logging
import os, time, random
import traceback
import datetime
from multiprocessing import Process, Pool

logging.basicConfig(level=logging.WARNING)


# 多进程
# Python的os模块封装了常见的系统调用,其中就包括fork,可以在Python程序中轻松创建子进程
# print('Process (%s) start...' % os.getpid())
# # Only works on Unix/Linux/Mac:
# pid = os.fork()
# if pid == 0:
#     print('I am child process (%s) and my parent is %s.' % (os.getpid(), os.getppid()))
# else:
#     print('I (%s) just created a child process (%s).' % (os.getpid(), pid))
# 由于Windows没有fork调用,上面的代码在Windows上无法运行。
# multiprocessing 模块是跨平台版本的多进程模块
# multiprocessing模块提供了一个Process类来代表一个进程对象,下面的例子演示了启动一个子进程并等待其结束:
# 子进程要执行的代码
def run_proc(name):
    print('Run child process %s (%s)...' % (name, os.getpid()))


if __name__ == '__main__':
    print('Parent process %s.' % os.getpid())
    p = Process(target=run_proc, args=('test',))
    print('Child process will start.')
    p.start()
    p.join()
    print('Child process end.')


# 如果要启动大量的子进程,可以用进程池的方式批量创建子进程
# Pool的默认大小是CPU的核数
def long_time_task(name):
    print('Run task %s (%s)...' % (name, os.getpid()))
    start = time.time()
    time.sleep(random.random() * 3)
    end = time.time()
    print('Task %s runs %0.2f seconds.' % (name, (end - start)))


if __name__ == '__main__':
    print('Parent process %s.' % os.getpid())
    p = Pool(4)
    for i in range(5):
        p.apply_async(long_time_task, args=(i,))
    print('Waiting for all subprocesses done...')
    p.close()
    p.join()
    print('All subprocesses done.')

# 操作文件和目录
# 查看当前目录的绝对路径:
os.path.abspath('.')
# 在某个目录下创建一个新目录,首先把新目录的完整路径表示出来:
# os.path.join('/Users/michael', 'testdir')
# 然后创建一个目录:
# os.mkdir('/Users/michael/testdir')
# 删掉一个目录:
# os.rmdir('/Users/michael/testdir')
# 把两个路径合成一个时,不要直接拼字符串,而要通过os.path.join()函数,这样可以正确处理不同操作系统的路径分隔符。
# 同样的道理,要拆分路径时,也不要直接去拆字符串,而要通过os.path.split()函数,这样可以把一个路径拆分为两部分,后一部分总是最后级别的目录或文件名:
# os.path.splitext()可以直接让你得到文件扩展名

# 列出当前目录下的所有目录,只需要一行代码:
dirs = [x for x in os.listdir('.') if os.path.isdir(x)]
print(dirs)
# 要列出所有的.py文件,也只需一行代码
files = [x for x in os.listdir('.') if os.path.isfile(x) and os.path.splitext(x)[1] == '.py']
print(files)

# 获取本机CPU核数
print("本机为", os.cpu_count(), "核 CPU")
# 查看环境变量
# print(os.environ)
# 获取某个环境变量的值
print(os.environ.get('PYTHONPATH'))


# 读取文件编码问题
# 遇到有些编码不规范的文件,你可能会遇到UnicodeDecodeError,因为在文本文件中可能夹杂了一些非法编码的字符。
# 遇到这种情况,open()函数还接收一个errors参数,表示如果遇到编码错误后如何处理。最简单的方式是直接忽略:
# f = open('/Users/michael/gbk.txt', 'r', encoding='gbk', errors='ignore')

# 断言
# 凡是用print()来辅助查看的地方,都可以用断言(assert)来替代
# 启动Python解释器时可以用-O参数来关闭assert 如:$ python -O err.py

def foo(s):
    n = int(s)
    assert n != 0, 'n is zero!'
    return 10 / n


foo('1')


# 记录错误
# Python内置的logging模块可以非常容易地记录错误信息,而且程序打印完错误信息后会继续执行,并正常退出:

def bar(s):
    ren = 10 / int(s)
    return ren


def main_1():
    try:
        bar('0')
    except Exception as e:
        logging.exception(e)


main_1()


# 装饰器
# 把@log放到now()函数的定义处,相当于执行了语句:now = log(now)
def log(text):
    def decorator(func):
        @functools.wraps(func)
        def wrapper(*args, **kw):
            try:
                start_time = time.time()
                f = func(*args, **kw)
                run_time = time.time() - start_time
                nowTime = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
                print('%s 运行 %s s\n当前时间:%s\n%s' % (func.__name__, run_time, nowTime, text))
                return f
            except Exception as e:
                print('%s出错:%s' % (func.__name__, traceback.print_exc()))

        return wrapper

    return decorator


@log("测试文本")
def now():
    print('2015-3-25')


now()

# 匿名函数
# 关键字lambda表示匿名函数,冒号前面的x表示函数参数
# 如以下简单函数可写为匿名函数并赋值给一个变量,再利用变量来调用该函数
# def f(x):
#     return x.replace('-','')

f = lambda x: x.replace('-', '')
print(f('5-4'))

print('END')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值