当前位置:首页 > 技术 > 正文内容

Python 入门指南:从基础到实践

访客 技术 2026年6月30日 1

Python 语言简介

Python 是一种面向对象、解释型的编程语言,由荷兰程序员 Guido van Rossum 在 1989 年圣诞节期间开始开发,首个公开版本于 1991 年发布。Python 的名称源自 Guido 喜爱的喜剧电视剧《Monty Python's Flying Circus》。

根据 2017 年的 TIOBE 排行榜,Python 已经跻身编程语言前四名。它广泛应用于数据分析、Web 开发、自动化运维、人工智能、科学计算、金融量化交易等多个领域。许多知名公司,如 Google、YouTube、Dropbox、知乎、豆瓣、百度、腾讯等,都在大量使用 Python 进行产品开发。

主要应用领域

  • 云计算: OpenStack 等主流平台广泛采用 Python。
  • Web 开发: 框架丰富(如 Django、Flask),支撑了 YouTube、Dropbox 等大型网站。
  • 科学计算与人工智能: 借助 NumPy、SciPy、Pandas、Matplotlib 等库,成为数据科学领域的首选语言。
  • 系统运维: 运维自动化脚本编写的重要工具。
  • 金融: 在量化交易、策略回测等领域表现出色。
  • 图形界面: 支持 PyQt、Tkinter 等 GUI 框架。

Python 与其他语言的区别

编程语言可以从不同角度进行分类,了解这些分类有助于理解 Python 的特性:

编译型 vs. 解释型

编译型语言(如 C、C++)的代码在运行前会被整体编译成机器码,因此执行效率高,但修改后需要重新编译,且跨平台性较差。而 解释型语言(如 Python)在运行时由解释器逐行翻译成机器码,每次执行都需要翻译,因此速度相对较慢,但跨平台性好,开发灵活。Python 属于解释型语言。

静态语言 vs. 动态语言

静态类型语言(如 C、Java)要求在编译时声明变量的数据类型,类型检查在编译阶段进行。动态类型语言(如 Python、Ruby)则在运行时才进行类型检查,变量可以随时被赋值为不同类型的数据。Python 是动态类型语言。

强类型 vs. 弱类型

强类型语言(如 Python、Java)禁止不同类型的数据隐式转换。例如,在 Python 中,不能将字符串"123"直接与整数1相加,必须先进行显式类型转换。弱类型语言(如 JavaScript、VBScript)则允许这些操作。Python 是强类型语言,它保证了程序的类型安全性。

Python 的优缺点

优点

  • 简洁易读: 代码风格优雅,可读性强,入门门槛低。
  • 高效开发: 拥有丰富的标准库和第三方库,可以快速实现复杂功能。
  • 高级语言: 自动管理内存,无需开发者处理底层细节。
  • 可移植性: 几乎所有主流平台都支持 Python 运行。
  • 可扩展性: 关键代码可用 C/C++ 编写以提高性能,再被 Python 调用。
  • 可嵌入性: Python 可以作为脚本语言嵌入到 C/C++ 程序中。

缺点

  • 运行速度: 相比 C 或 Java,执行速度较慢。但对于大多数应用场景,这种差异用户难以察觉。
  • 加密困难: 作为解释型语言,源码以明文形式存在,难以加密。
  • 全局解释器锁(GIL): 在多线程编程中,GIL 使得同一时刻只有一个线程能执行,限制了多核 CPU 的利用。但可通过多进程或异步编程来规避。

Python 解释器

Python 代码需要解释器来执行。常见的解释器包括:

  • CPython: 官方默认的解释器,使用最广泛,由 C 语言实现。在命令行输入 python 启动的就是它。
  • IPython: 基于 CPython 的增强交互式解释器,提供更丰富的功能,但执行 Python 代码的内核与 CPython 相同。
  • PyPy: 旨在提高执行速度,通过 JIT(即时编译)技术将 Python 代码编译成机器码。
  • Jython: 运行在 Java 平台,可将 Python 代码编译为 Java 字节码。
  • IronPython: 运行在 .NET 平台,可将 Python 代码编译为 .NET 字节码。
小结: 对于绝大多数开发者,选择 CPython 即可。需要与 Java 或 .NET 平台集成时,通常建议通过网络通信而非使用 Jython 或 IronPython。

开发环境搭建

Windows 安装

  1. 访问 Python 官网下载对应版本(例如 3.x 或 2.7)。
  2. 运行安装包,安装到指定目录(如 C:\python3)。
  3. 将 Python 安装路径(如 C:\python3C:\python3\Scripts)添加到系统环境变量 Path 中。

Linux 安装(以 CentOS 为例)

# 查看默认版本
python -V

# 安装编译工具
yum install gcc -y

# 下载源码包(以 Python 2.7 为例)
wget https://www.python.org/ftp/python/2.7.x/Python-2.7.x.tgz

# 解压并进入目录
tar -zxvf Python-2.7.x.tgz
cd Python-2.7.x

# 配置、编译、安装
./configure
make all
make install

# 检查新版本
/usr/local/bin/python2.7 -V

# 替换系统默认 Python 版本(谨慎操作)
mv /usr/bin/python /usr/bin/python2.6
ln -s /usr/local/bin/python2.7 /usr/bin/python

# 修复 yum 因版本问题无法运行
vi /usr/bin/yum
# 将文件头部的 #!/usr/bin/python 改为 #!/usr/bin/python2.6

基础语法结构

代码缩进

Python 使用缩进来定义代码块,而非花括号或关键字。同一层次的代码必须保持相同的缩进量,通常推荐使用四个空格。

Linux 下在 Vim 中配置自动缩进:

# 编辑 ~/.vimrc
set ai
set tabstop=4

注释

使用 # 符号表示单行注释,从该符号开始到行尾的内容都会被解释器忽略。

文档字符串

文档字符串是多行注释的一种,通常位于模块、类或函数定义的开头,用三引号包裹。它们可以通过 help() 函数查看。

#!/usr/bin/env python
"""star module: 一个示例模块,仅包含一个简单函数"""
def print_stars():
    "不接受参数,打印 50 个星号"
    print('*' * 50)
    
# 加载模块后可通过 help(star) 查看文档

Python 入门实践

编写第一行代码

创建一个名为 hello.py 的文件,输入:

print("hello, world")

在终端执行 python hello.py,即可看到输出。

如果需要像执行 Shell 脚本一样运行(./hello.py),需在文件首行添加解释器声明并赋予执行权限:

#!/usr/bin/env python
print("hello, world")

执行 chmod 755 hello.py 后,即可通过 ./hello.py 运行。

字符编码

Python 2 默认使用 ASCII 编码,这会导致非英文字符(如中文)出现错误。Python 3 默认使用 UTF-8 编码,但为兼容老代码,建议在文件开头明确声明编码:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
print("你好,世界")

编码声明必须放在文件的第一行或第二行。常用的格式包括:

  • # coding=<编码名>
  • # -*- coding: <编码名> -*-
  • # vim: set fileencoding=<编码名>

模块初识

Python 拥有丰富的模块,包括内置模块、第三方模块和自定义模块。通过 import 语句导入模块。

例如,使用内置的 sys 模块获取脚本启动参数:

import sys
print(sys.argv)  # 打印传递给脚本的命令行参数列表

.pyc 字节码文件

执行 Python 程序时,如果导入了外部模块,解释器会将其编译成字节码,并存储为同名的 .pyc 文件。这是为后续加载该模块时提高速度。

变量

命名规则

  • 变量名由字母、数字、下划线组成。
  • 不能以数字开头。
  • 大小写敏感。
  • 不能使用 Python 保留关键字。

查看全部关键字:

import keyword
print(keyword.kwlist)  # 列出所有关键字
print(keyword.iskeyword('if'))  # 判断是否为关键字,输出 True

变量赋值

name = "hello"  # 字符串赋值
x, y, z = 1, 2, "abc"  # 多元赋值
x = y = 1  # 链式赋值
x += 1  # 增量赋值,等同于 x = x + 1
# 交换变量值
x, y = y, x

获取用户输入(Python 3)

username = input("请输入用户名:")
print(f"您好,{username}!")

在 Python 2 中,使用 raw_input() 获取字符串输入。Python 3 的 input() 功能相当于 raw_input()

流程控制与循环

条件语句 (if)

age = 20
if age < 18:
    print("未成年人")
elif age >= 60:
    print("老年人")
else:
    print("成年人")

条件表达式(三元运算符)

outcome = "及格" if score >= 60 else "不及格"

while 循环

count = 0
while count < 5:
    print(f"计数:{count}")
    count += 1

for 循环

fruits = ["苹果", "香蕉", "橘子"]
for fruit in fruits:
    print(fruit)

for i in range(5):  # range(5) 生成 0,1,2,3,4
    print(i)

break 语句

用于跳出当前循环。

for i in range(10):
    if i == 5:
        break  # 当 i 等于 5 时退出循环
    print(i)  # 输出 0-4

continue 语句

跳过本次循环的剩余部分,进入下次循环。

for i in range(10):
    if i % 2 == 0:
        continue  # 偶数跳过,不打印
    print(i)  # 输出 1,3,5,7,9

pass 语句

空操作,通常用作占位符,保持结构完整。

def not_implemented_yet():
    pass  # 函数体暂时为空

else 与循环配合

whilefor 循环后可以跟 else 子句,当循环正常结束(未通过 break 中断)时,执行该子句。

for num in range(2, 10):
    for divisor in range(2, num):
        if num % divisor == 0:
            break
    else:
        print(f"{num} 是质数")

迭代与推导式

迭代

迭代是访问序列元素的一种方式。Python 中,任何实现了 __iter__() 方法的对象都是可迭代对象。

my_list = [1, 2, 3]
for element in my_list:  # my_list 是可迭代对象
    print(element)

列表解析(List Comprehension)

列表解析是一种简洁创建列表的方法,可看作生成列表的语法糖。

# 生成 0 到 9 的平方列表
squares = [x**2 for x in range(10)]
print(squares)  # 输出 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

# 带条件的列表解析
even_squares = [x**2 for x in range(10) if x % 2 == 0]
print(even_squares)  # 输出 [0, 4, 16, 36, 64]

生成器表达式(Generator Expression)

生成器表达式在语法上与列表解析相似,但使用圆括号而非方括号,且它返回的是生成器对象,按需生成元素,节省内存。

squares_gen = (x**2 for x in range(10))
print(type(squares_gen))  # 输出 <class 'generator'>

# 通过循环取用生成器元素
for value in squares_gen:
    print(value)  # 依次打印 0,1,4,9...
提示: 生成器在数据量很大时非常有用,因为它在内存中只保留当前元素,不会一次性生成全部数据。
标签: Python

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。