Python 编程介绍 基础数据 结构 格式化 迭代器iterator collections浅拷贝与深拷贝 queue 正则表达式 argparse 上下文管理器 函数装饰器 多线程编程

本文介绍了Python编程的基础,包括数据结构如列表、元组、字典和集合,字符串的格式化,迭代器和collections模块。深入讲解了正则表达式的应用,argparse模块的使用,以及上下文管理器和函数装饰器的概念。此外,还探讨了Python中的多线程编程和异常处理,为初学者提供了全面的学习指南。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Python 编程介绍

Python 是一种功能强大的编程语言,广泛应用于各种领域,包括网站开发、数据分析、人工智能等。

  • Python 编程介绍:
    Python 是一种高级编程语言,强调代码的可读性和简洁性。
    它支持多种编程范式,包括面向对象编程、函数式编程和过程式编程。
    Python 有一个庞大的标准库和丰富的第三方库,如 NumPy、Pandas、TensorFlow 等。
  • 基础数据结构:
    列表(List):可变的有序元素集合。
    元组(Tuple):不可变的有序元素集合。
    字典(Dictionary):键值对的无序集合。
    集合(Set):无序且不包含重复元素的集合。
    格式化:
    字符串格式化可以使用 % 运算符、str.format() 方法或 f-string(从 Python 3.6 开始)。
  • 迭代器(Iterator):
    迭代器是一个可以记住遍历的位置的对象。
    迭代器从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。
    列表、元组、字典、集合等都是可迭代对象,但不是迭代器,但可以通过 iter() 函数获取它们的迭代器对象。
  • Collections:
    Python 的 collections 模块提供了额外的数据结构,如 deque(双端队列)、Counter(计数器)、OrderedDict(有序字典)等。
  • 浅拷贝与深拷贝:
    浅拷贝(Shallow Copy):只复制对象的顶层数据和引用,而不复制对象引用的其他对象。
    深拷贝(Deep Copy):复制对象及其所有引用的对象,形成一个完全独立的新对象。
    使用 copy 模块的 copy() 函数进行浅拷贝,使用 deepcopy() 函数进行深拷贝。
  • Queue:
    Python 的 queue 模块提供了同步队列类,包括 FIFO(先进先出)队列 Queue,LIFO(后进先出)队列 LifoQueue,以及优先级队列 PriorityQueue。
    正则表达式(Regex):
    Python 的 re 模块提供了对正则表达式的支持,用于在字符串中查找、替换和分割文本。
  • argparse:
    argparse 是 Python 标准库中的一个模块,用于编写用户友好的命令行接口。
    它可以帮助你从命令行参数中解析出程序需要的参数。
  • 上下文管理器(Context Manager):
    上下文管理器用于管理一些资源的初始化与清理工作,如文件的打开与关闭、数据库连接的创建与关闭等。
    通过实现 enter() 和 exit() 方法来定义上下文管理器。
    使用 with 语句可以方便地管理资源。
  • 函数装饰器(Function Decorator):
    装饰器是 Python 中的一个高级功能,用于在不修改函数内部代码的情况下给函数增加额外的功能。
    装饰器是一个接受函数作为参数并返回一个新函数的函数。
  • 多线程编程:
    Python 的 threading 模块提供了对多线程编程的支持。
    但由于 Python 的全局解释器锁(GIL),多线程在 CPU 密集型任务上可能不会带来性能提升。
    对于 I/O 密集型任务,多线程编程仍然是一个好的选择。

以上只是 Python 编程的冰山一角,Python 还有许多其他特性和库等待你去探索和学习。

安装 Python3
sudo apt install libffi-dev # setuptools error
sudo apt install build-essential gcc
sudo apt install libssl-dev libncurses5-dev libsqlite3-dev libreadline-dev libtk8.6 libgdm-dev libdb4o-cil-dev libpcap-dev

wget https://www.python.org/ftp/python/3.8.3/Python-3.8.3.tar.xz
sudo tar -xvf Python-3.8.3.tar.xz
cd Python-3.8.3
./configure
make
make install
基础数据
bool(int(str(3))) -> True
bool(int(str(0))) -> False
数据结构
rangexrange的区别:xrange返回生成器,可以转化成list

list.extend(list)
list.append(item)

# split不加参数,默认为所有的空字符,包括空格、换行(\n)、制表符(\t)等
list = [x.strip() for x in list_string.split() if x.strip()]
list = filter(lambda x: x != 2, iterable)

# dict: 同一dict中存储的value类型可以不一样

# 普通dict的default插入方式(类似于C++的[])
obj = dict.setdefault(key, default=None)
dict.get(key, 'default')

# set
unique_elements = list(set([2,1,2])) # Remove duplicates
myset.remove(elem)
if not myset: # 判断set是否空

# set operations: https://www.linuxtopia.org/online_books/programming_books/python_programming/python_ch16s03.html
&, |, -, ^
字符串
格式化
a=1
f'{
     
     a:011d}'
  • 011d是格式规范,它由冒号和格式选项组成。
    • 0是填充字符,表示使用0来填充字段。
    • 11是字段宽度,表示该字段的总宽度为11个字符。
    • d表示将变量视为十进制整数进行格式化。
迭代器iterator
# next取下一个元素
next((value for value in values if type(value) == Tensor), None)
collections

collections.defaultdict(list)、collections.defaultdict(set)

  • defaultdict相比普通dict的区别在于:使用索引时,如果未查找到,会自动插入默认值
  • dict 可以用 tuple 作 key
d = defaultdict(lambda: 0)
d[key1, key2] = val
if (key, key2) in d:
  ...
for k in d.iteritems(): # 不支持直接用 for k, v 遍历
  v = d[k]
  ...
for k,v in d.items(): # python3.6+
  ...

collections.counter

class Example(collections.namedtuple('Example', ['aid', 'bid', 'cid', 'did']))

	@classmethod
	def from_abcd(cls, a, b, c, d):
    return cls(a, b, c, d)
浅拷贝与深拷贝copy.py

核心思想:

  • 赋值是将一个对象的地址赋值给一个变量,让变量指向该地址( 旧瓶装旧酒 )。
  • 修改不可变对象(str、tuple)需要开辟新的空间
  • 修改可变对象(list等)不需要开辟新的空间

=> 所以说改 list 会牵连复制的对象,而改 str 等不会互相影响

import copy
copy.deepcopy(dict)
queue
# queue.py
task_done()
join()
put(data)
get()

queue的利用:新线程prefetch内容塞进queue里,可以拿到遍历queue的更快的生成器(yield结尾)
namedtuple

https://realpython.com/python-namedtuple/

一些细节

  • 运行文件乱码问题,在文件开头加 # coding=utf-8
dataclasses
import dataclasses

@dataclasses.dataclass
class InventoryItem:
    """Class for keeping track of an item in inventory."""
    name: str
    unit_price: float
    quantity_on_hand: int = 0
    name_set: set = dataclasses.field(default_factory=set)

    def total_cost(self) -> float:
        return self.unit_price * self.quantity_on_hand
正则表达式

教程:https://www.runoob.com/regexp/regexp-tutorial.html

python正则:https://www.runoob.com/python3/python3-reg-expressions.html

import re
tmp = re.sub("pattern", "", line.strip('\n'))
matchObj = re.match(r'', line.strip('\n'), re.M|re.I)
argparse
import argparse
def main():
    parser = argparse.ArgumentParser()
    parser.add_argument('--num_xxx', type=int, default=10, help='number of xxx')
    args = parser.parse_args()
    
# 设计模式:可以直接把args传入程序中的各种类作为self._args成员

# subparser
subparsers = parser.add_subparsers(help='sub-command help')
#添加子命令 add
parser_a = subparsers.add_parser('add', help='add help')
parser_a.add_argument('-x', type=int, help='x value')
parser_a.add_argument('-y', type=int, help='y value')
#设置默认函数
parser_a.set_defaults(func=add)
#添加子命令 sub
parser_s = subparsers.add_parser('sub', help='sub help')
parser_s.add_argument('-x', type=int, help='x value')
parser_s.add_argument('-y', type=int, help='y value')
#设置默认函数
parser_s.set_defaults(func=sub)

args 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

EwenWanW

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值