【Python】:老鸟的入门笔记(1)

Python
201
0
0
2024-01-06

提要

哈喽,大家好!相信有很多在传统软件行业的小伙伴,日常接触JS、Java、C#这类语言多一些,很少用到Python。但是Python确实很香(例如:AI、数学、绘图等),早晚会碰上它。对于我们这些懂编程但不懂Python的“老新手”来说,只有系统、全面地科普一下Python基础知识,才能更好、更高效地搬运的代码。下面是我整理的一些笔记,分享给大家。

1. Python 有多种实现

  • CPython:标准 Python。最初的、标准的 Python 实现方式。这个名字来自它是由 ANSI C 语言代码编写而成的这个事实。

  • Jython:基于 Java 的 Python。Jython项目提供了Python在Java中的实现,为Python提供了在JVM上运行和访问用Java编写的类的好处。

  • IronPython:基于 .NET 的 Python。IronPython是Python编程语言的开源实现,与.NET紧密集成。IronPython可以使用.NET和Python库,其他.NET语言也可以轻松使用Python代码。

  • PyPy:注重速度的 Python。PyPy 提供了一个带有即时编译器(JIT)的 Python 快速实现。

  • Stackless Python:注重并发的Python。该项目基本上是 CPython 解释器的一个分支,它为语言添加了微线程、通道和调度器。微线程允许将代码组织到微线程中,从而可以并行运行代码。
  • Micro Python:如果以微控制器为目标,那么 MicroPython 是您的令一种选择。这是一个精简的实现,只需要 16kB 的 RAM 和 256kB 的空间。

2. 打包

py2exe(Windows)、PyInstaller(Linux、UNIX)可以将 Python 程序打包成独立可执行的文件,用于在未安装Python的平台上执行Python编写的应用程序。

3. 常量

  • Python 不支持自定义常量
  • 通常约定:用名称全部为大写的变量来表示常量
DB_USERNAME = "admin"
DB_PASSWORD = "sa"                                                       

4. 作用域

  • 局部变量:定义在函数内部的变量
  • 全局变量:定义在函数外部的变量
global_var = 1
def fn():
    local_var = 2

5. 对象、变量

  • 变量无须单独声明,对一个不存在的变量赋值就相当于定义了一个新变量
  • del 命令可以删除变量
  • 对象是 Python 中最基本的概念。Python 程序中处理的每样东西都是对象。例如:数字、字符串、布尔、字典、列表、集合、元组、文件、类等都是对象。
  • id() 可得到对象的地址
  • dir() 可列出对象的所有属性
  • is 判定对象的地址是否相同
  • type() 可得到对象的类型
  • == 判定对象的值是否相同
a = {"xm": "张三"}
b = {"xm": "张三"}
print(a, id(a), type(a))
print(a == b, a is b)
del a
print(a)

6. Python 的工具库层次关系

Python 的工具库是呈层级分布的。可作用于多种类型的通用操作都是以内置函数或表达式的形式出现的(例如:len()、dir()、type()等)。但是类型的操作是以方法调用的形式出现的(例如:aString.upper())。

7. 字符串(序列)

  • '、"、''' 都可用于定义字符串
  • ''' 可定义多行字符串(便于嵌入多行的JSON、XML、HTML代码)
c = '张三'
d = "李四"
e = '''你好,
王五'''
print(c, d ,e)

  • 原始(raw)字符串字面量(用 r 开头),可以去掉反斜线的转移机制。(例如:表达 Windows 下的文件路径时非常有用)。
path1 = 'c:\windows\abc\bcd'
path2 = r'c:\windows\abc\bcd'
print(path1)
print(path2)

  • 字符串是不可变的。在字符串创建后不能原位置(in place)改变,即没有任何操作允许你对原始的字符串进行改变。每个字符串操作都被定义为生成新的字符串作为其结果。
a = "hello webj2eedev"
a[0] = "h"

  • 字符串格式化:
  • %
  • format
  • f-string(Python3.6加入,推荐)
zs = "张三"
ls = "李四"

a = "hello, %s, %s." % (zs, ls)
b = "hello, {}, {}.".format(zs, ls)
c = "hello, {1}, {0}.".format(zs, ls)
d = f"hello, {zs}, {ls}."
print(a)
print(b)
print(c)
print(d)
  • * 可以重复输出字符串
zs = "张三"
print(zs*3)

8. 列表(list)、元组(tuple)、字典(dict)、集合(set)

  • 元组(tuple)和列表(list)很像,只是元组是不可变的对象。
a = [1, 2, 3, 4] # 列表,可变
b = (6, 7, 8, 9) # 元组,不可变
c = {"xm": "张三", "age": 18} # 字典
d = {"张三", "李四"} # 集合

9. 推导表达式(comprehension expression)

  • 推导源自数学中集合的概念。它是一种通过对序列中的每一项运行一个表达式来创建一个新序列的方法。
a = range(10)
b = [item ** 2 for item in a]
c = [item ** 2 for item in a if item % 2 == 0]
d = {item: item ** 2 for item in a}
e = {item for item in a}
print(b)
print(c)
print(d)
print(e)

10. 布尔值

x = True
y = False

11. 三元表达式

本质是挤在一行中的一条 if 语句

classes = {
    "张三": 18,
}
xm = "李四"
r = classes[xm] if xm in classes else "NOT EXIST"
print(r)

12. 成员运算(in、not in)

map = {
    "张三": 18,
    "李四": 30
}
xm = "hello world"
print("张三" in map, 
      "王五" not in map,
      "world" in xm)

13. 逻辑运算(not、and、or)

if(3 > 4 or 1 < 2 and 2<3):
    print("yes")
    
if(not (1 > 2)):
    print("no")

14. 函数

  • 参数传递:对于不可变类型(字符串、元组、数字),按值传递;对于可变类型,按地址传递
def add(a, b):
    return a+b

def sum(a, b=100):
    return a+b

def sub(*args):
    return args[0] - args[1]

def div(**args):
    return args["a"]/args["b"]

mul = lambda a, b: a * b

print(add(1, 2))
print(sum(1))
print(sub(1, 2))
print(div(a=100, b=2))
print(mul(4, 5))

15. 异常处理

try:
    1/0
    print("here?")
except Exception as e:
    print(e)
finally:
    print('hohoho')

参考:

Multiple Python interpreters: https://developer.fedoraproject.org/tech/languages/python/multiple-pythons.html
Jython: https://www.jython.org/ Iron
Python: https://ironpython.net/
PyPy: https://www.pypy.org/index.html Stackless
Python: https://github.com/stackless-dev/stackless/wiki/
py2exe: https://github.com/py2exe/py2exe