当前位置:首页>python>Python 基础语法

Python 基础语法

  • 2026-09-10 03:03:02
Python 基础语法
封面:克萝伊,出自《底牌很多的维多利亚》。
    听孩子说学校要开课教他们 Python 了。想想之前,他学机器人学过一点编程。之后又说想玩我的世界,我就教了他一点 Java (《MinecraftForge 源码阅读---客户端启动》)。Python 虽然这几年工作一直在用,不过真没教过他,所以打算随便写点基础语法,让他熟悉熟悉。
    虽然现在网上 AI 编程,以后不需要程序员之类的言论炒得火热。但也不过是一些UP主为了流量,一些云厂商为了卖 token。做个小功能自娱自乐还凑合,要做系统,不再来个突破性的进展,还有点难。《用 AI 开发了个后端服务》也不知道有几个人看到我结尾写的内容了。不过那也只是一点点小问题,细的不说,看看这两年出了最高级故障就知道了。真心推荐《代码大全》大家看看,知道一下程序员的门槛是啥。不是能编程就能做程序员,就像作家必须会写字,但谁会觉得能写字就能成为职业作家。我都写了这么多博客了,都是自己写的,也没能成为作家。
    其实,一直不太热心教他编程语法,是因为我觉得语法这种东西,学会了一种,其他的都差不多。工作这么多年 ,常见的语言几乎都用过,甚至有一些都快忘了。除了函数式的 Scala 当年写的头痛,其他的主要掌握难度都是是否熟悉都有哪些常用组件,而非语法本身。
    学编程最主要的,还是数据结构。还是那句经典概括,程序等于数据结构加算法。算法就是逻辑,而数据结构就是逻辑的落脚点。如面向对象中的对象,执行逻辑的主体,而逻辑就是对象的动作,所有改变对象状态的行为都是逻辑。不过,现在也不是给孩子讲数据结构的时候,虽然也不难。不过,毕竟是大学两个学期的课,还是先解决眼前问题。
    一切编程语言,语法本身的执行,无非顺序、分支和循环三种。① 顺序就是从上到下一行一行顺序执行。这里介绍的是 python 3.0以后的。它和之前版本(如 2.x)有些不兼容,如(不过,问题不大,可以暂时忽略):
2.x 输出 print "Hello World!"3+ 是 print("Hello World!")
    ② 分支:
if i == 0:    print("零")    i = -1elif i > 0:    print('正数')elif i < 0:    print('负数')else:    print("不清楚")

    其中 i 是个变量,类似一个占位符。就像方程 ax+b = 0 中的 a、b,可以代入任意在其取值范围内的值。‘==’ 是判断是否相等的计算符,相等则计算结果为真(True),不相等则为假(False)。如果 i = 0,一个 '=' 是赋值,让 i 代入 0,则输出‘零’。如果 i ≠ 0,开始判断第一个 elif (else if),到最后如果两个 elif 都不满足,就 else 兜底,输出‘不清楚’。Java 中可以用 else if,也可以用switch case,不过要根据分支数选择性使用。

    可以看到,如果 i = 0,在输出‘零’后,i 又被赋值为 -1。但此时已经走入了 i == 0 分支。所以即使此时 i < 0,也不会再顺序进行后续的判断,整个分支代码块结束。这就是分支与顺序执行的区别。

    另外,与Java 在 if 的作用范围有多行语句时使用'{}'不同。Python 使用缩进来区分作用范围。例如:

'''注释开始分支判断判断条件是 i 是否等于 0 注释结束'''if i == 0:    # 输出零 (注释行)    print("零")    i = -1else:    i = 1print("不清楚")

    因为 print ("不清楚") 前的缩进与分支相同。当 i = 0 时,就会顺序的输出:

零不清楚

    其中,# 和 ''' 都是用于注释说明的,不会被当做语句执行。# 是单行注释,只有 # 同一行的后续字符会被当做注释。而 ''' ...''' 是多行注释,在两个 ''' 之间的所有内容都会被当做注释。

    另外,Python 在一行语句结束时是没有结束标记的。相对的,如果一行写不下,可以用 '\' 表示下一行和这一行是同一行内容。如:

i = 1 + \    2 + \    3

    经过加法(+)运算,上面语句最终 i 被赋值为 6。

    这里的 i 可以接受计算后的赋值,它的数据类型就是数值类型。数值常用于计算的有整形 int 和浮点型 float,一个是整数,一个是带小数的。Python 3 之后就没有其他语言中的长整形了。还有一个用于逻辑判断的布尔类型 bool,通常表示真假,值为 True、Fasle。bool 值在 Python 中实际是 int,可以用于运算,True:1、Fasle:0。BTW,其他很多语言中布尔类型是 bit,好处就是占用空间小,如《检索IP所在网段》就用了这个特性。另外还有复数类型,不过不常用。

    上例中的 "不清楚","零"是基本类型中的 string 字符串,也可以用单引号表示如 '零',注意单、双引号都是半角的。字符串有很多截取拼接的方法,之后再讲。例:

char = 't'word = f's{char}ar{char}'print(word)会输出:start

    另外,print 也可以不只输出一行,如 print("aaa\nbbb"),会将 aaa 和 bbb 分两行输出。因为 \n 是换行符:

print('\n')  会输出空行

    如果想输出 \n,可以:

print(r'\n')

    其中 r 表示 raw,输出原始字符串。'\' 是转义符,常用于一些特定符号,如:

print("双引号: \" 输出")输出:双引号: " 输出

    如果不用 \ 转义,就会报错,因为字符串会在 \" 结尾。

    ③ 循环:可以用 while 和 for 来实现循环。

    变量 count 每次循环就增大 1,当 count < 5 这个条件成立时,就会执行循环体。直到 count = 5,执行 else 的逻辑。

count = 0while count < 3:   print (count, " 小于 3")   count = count + 1else:   print (count, " 大于或等于 3")

执行结果:

0  小于 31  小于 32  小于 33  大于或等于 3

    sites 是一种集合变量,可保存多个值的变量,这是一个字符串列表(列表的使用方法之后再说)。这个循环就是每次输出 sites 列表中的一个元素,直至全部输出:

sites = ["Baidu", "Google","Runoob","Taobao"]for site in sites:    print(site)
    执行结果:
BaiduGoogleRunoobTaobao

    range() 函数经常被用于循环:

#  1 到 5 的所有数字:for number in range(1, 6):    print(number)
    执行结果:
12345
    range()  函数是个左闭右开的函数。如 list(range(1,5))=[1, 2, 3, 4], 也就是 [1,5),如果只传一个参数,如 range(5),则默认从 0 开始 [0,5)。

    可使用 break 在循环未完成时,跳出当前循环体。会跳出整个 for 的逻辑,包括 else 的,所以此例的结果输出中,不会有“没有循环数据!”的输出。

sites = ["Baidu", "Google","Runoob","Taobao"]for site in sites:    if site == "Runoob":        print("菜鸟教程!")        break    print("循环数据 " + site)else:    print("没有循环数据!")print("完成循环!")
    执行结果:
循环数据 Baidu循环数据 Google菜鸟教程!完成循环!

    break 语句可以跳出 for 和 while 的循环体。如:循环条件永远为真(while True:),可通过手动在循环中用break结束循环

    continue 语句被用来告诉 Python 跳过当前循环块中的剩余语句,直接继续进行下一轮循环。如跳过 Runoob:

sites = ["Baidu", "Google","Runoob","Taobao"]for site in sites:    if site == "Runoob":        continue    print("循环数据 " + site)else:    print("没有循环数据!")print("完成循环!")
    执行结果:
循环数据 Baidu循环数据 Google循环数据 Taobao完成循环!
    分支、循环中还有一个 pass 语句,严格来说平时不多见,我比较喜欢用。它本身几乎没什么功能,就是个占位。
for letter in 'Runoob':    if letter == 'o':        pass    else:        letter = '+'        pass    print ('当前字母 :', letter)
    执行结果:
当前 : + 当前 : + 当前 : + 当前 : o 当前 : o 当前 : +
    如果没有 pass,这段代码会报错,因为 if 段中没有语句。这种情况多用于,if 中处理逻辑还没设计好,或需求有待商榷。要预留位置,以便开发之后的逻辑。当然 pass 也可以就是单纯为了好看,或者做个标记,如 else 中的 pass。
    这个执行结果看起来挺占地方的,也可以输出到一行,在 print 中传 end 参数即可,默认不传的情况下 end 是换行符。如:
# Fibonacci series: 斐波纳契数列a, b = 0, 1while b < 1000:print(b, end=',')a, b = b, a+b
    执行结果:
1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,

    循环列表时,可以使用内置函数enumerate()同时获取索引(元素顺序位置)和值:

enumerate 意为"枚举",表示逐一列举。for i, v in enumerate(list)
fruits = ["苹果", "香蕉", "橙子"]# 获取索引和值for index, fruit in enumerate(fruits):    print(f"{index}: {fruit}")
0: 苹果1: 香蕉2: 橙子
fruits = ["苹果", "香蕉", "橙子"]for i, fruit in enumerate(fruits, start=10):    print(f"索引 {i}: {fruit}")
索引 10: 苹果索引 11: 香蕉索引 12: 橙子

    还有一种特定情况下能达到循环效果的:Python 推导式。它可以从一个数据序列构建另一个新的数据序列的结构体。适用于生成列表、字典、集合和生成器。

multiples = [i for i in range(30) if i % 3 == 0]print(multiples)

    输出

[0, 3, 6, 9, 12, 15, 18, 21, 24, 27]
    文中例子是在 https://www.runoob.com/ 中例子基础上做的微调,这是个很好的教程网站。
    无论哪种程序语言,代码无非顺序、分支、循环三种。舍此之外,主要就是熟悉开发工具和各种类包了。基本语法掌握后,还是学好数据结构更重要。虽然现在 AI 也能帮着写代码了,不过也就是一些辅助工作,或者逻辑不特别复杂,并发压力几乎没有的玩具。真正重要的部分,更多的是处于一种,专业的人花大精力指导 AI 做还不如自己写快,而外行根本不知道还有这种工作需要做的状态。

最新文章

随机文章