3 Python 快速入门

Python 快速入门

程序输出: print 函数及打印 “hello world”

hello.py 文件

#!/usr/bin/python3
import sys

if sys.version[0] == '2':
    print 'Hello World!'
elif sys.version[0] == '3':
    print('Hello World!')

不管哪种 Unix 平台,Python 脚本都可以像下面这样,在命令行上通过解释器执行。

$ python hello.py

输出结果为:

Hello World!

#!/usr/bin/python3 代码的解释

如果你使用的是类 Unix 平台,你可以在你的脚本的第一行使用 shell 魔术字符串(“sh-bang”)。

注意: 包括任何的脚本语言。

Unix 平台还可以在不明确指定 Python 解释器的情况下,自动执行 Python 解释器。

#!/usr/bin/python
是告诉操作系统执行这个脚本的时候,调用 /usr/bin 下的 python 解释器。

#!/usr/bin/python3
表示该脚本调用 /usr/bin 下的 python3 解释器。

#!/usr/bin/env python
这种用法是为了防止操作系统用户没有将 python 装在默认的 /usr/bin 路径里。当系统看到这一行的时候,首先会到 env 设置里查找 python 的安装路径,再调用对应路径下的解释器程序完成操作。(推荐这种写法)

程序输入: input() 函数

输入用户名

#!/usr/bin/python3
import sys

if sys.version[0] == '2':
    user = raw_input('Enter login name: ')
elif sys.version[0] == '3':
    user = input('Enter login name: ')

print('Your login is', user)

输入一个数值字符串,并将字符串转换为整型

#!/usr/bin/python3
import sys

if sys.version[0] == '2':
    num = raw_input('Now enter a number: ')
elif sys.version[0] == '3':
    num = input('Now enter a number: ')

print('Doubling your number: %d' % (int(num) * 2))

注释

行注释。Python 使用 # 符号标示注释,从 # 开始,直到一行结束的内容都是注释。

def foo():
	# This is a doc string.
	return True

文档字符串注释。你可以在模块、类或者函数的起始添加一个字符串,起到在线文档的功能,这是 Java 程序员非常熟悉的一个特性。

def foo():
	""" This is a doc string. """
	return True

与普通注释不同,文档字符串可以在运行时访问,也可以用来自动生成文档。

变量和赋值

下列代码

counter = 0
miles = 1000.0
name = 'Bob'
counter = counter + 1
kilometers = 1.609 * miles

print('%f miles is the same as %f km' % (miles, kilometers))

输出结果为:

1000.000000 miles is the same as 1609.000000 km

Python 中变量名规则

Python 中变量名规则与其他大多数高级语言一样,都是受 C 语言影响(或者说这门语言本身就是 C 语言写成的)。
变量名仅仅是一些字母开头的标识符——所谓字母开头——意指大写或小写字母,另外还包括下划线(_)。其他的字符可以是数字、字母或下划线。
Python 变量名是大小写敏感的,也就是说变量 “case” 与 “CaSe” 是两个不同的变量。

Python 动态类型

Python 是动态类型语言,也就是说不需要预先声明变量的类型。

变量的类型和值在赋值那一刻被初始化。变量赋值通过等号来执行。

数字类型

Python 支持五种基本数字类型,其中有三种是整型类型。

  • 长整型 (int)
  • 浮点值 (float)
  • 复数 (complex)

数字的基本运算

下列代码

# + 加法
print(100 + 3)
# - 减法
print(100 - 3)
# * 乘法
print(100 * 2)
# / 除法
print(100 / 3)
# // 整除
print(100 // 3)
# % 余数
print(100 % 3)
# ** 乘方
print(10 ** 2)

输出结果为:

103
97
200
33.333333333333336
33
1
100

数字的比较

Python 当然也有标准比较操作符,比较运算根据表达式的值的真假返回布尔值。

< <= > >= == != <>

下列代码

print(2 < 4)
print(2 == 4)
print(2 > 4)
print(6.2 <= 6)
print(6.2 <= 6.2)
print(6.2 <= 6.20001)

输出结果为:

True
False
False
False
True
True

Python 目前支持两种 “不等于“ 比较操作符,!=<>,分别是 C 风格和 ABC/Pascal 风格。目前后者慢慢地被淘汰了,所以我们推荐使用前者。

布尔类型

布尔类型的常量值为: FalseTrue

布尔的逻辑操

Python 也提供了逻辑操作符。

and or not

使用逻辑操作符可以将任意表达式连接在一起,并得到一个布尔值。
下列代码

print(True and False)
print(False or True)
print(not False)

输出结果为:

False
True
True

字符串类型

Python 中字符串被定义为引号之间的字符集合。
Python 支持使用成对的单引号或双引号,三引号(三个连续的单引号或者双引号)可以用来包含特殊字符。

字符串连接

加号(+)用于字符串连接运算

# Python is cool!
print('Python' + ' ' + 'is cool!')

字符串重复

星号(*)则用于字符串重复

# PythonPythonPython
print('Python' * 3)

字符串长度

使用 len() 函数可以获取序列对象的元素个数。

通过 len() 函数,获取字符串的字符数。

pystr = 'Python'
print(len(pystr)) # 6

字符串索引

使用索引操作符([])得到字符。

字符串有其特有的索引规则:第一个字符的索引是 0,最后一个字符的索引是 -1。

pystr = 'Python'
print(pystr[0])
print(pystr[3])
print(pystr[-1])

‘Python’ 字符串长度为 6 (等同于 len(pystr)), 从索引 0 到 索引 5 (等同于 len(pystr) - 1)。

字符串切片

切片操作符([start:end:step])可以得到子字符串。

子字符串从索引从 startend-1,步长 step 默认为 1

代码

pystr = 'Python'
print(pystr[2:5])   # 子字符串索引从 2 到 4
print(pystr[:2])    # 子字符串索引从 0 到 1
print(pystr[3:])    # 子字符串索引从 3 到字符串末尾
print(pystr[3:-1])  # 子字符串索引从 3 到 4
print(pystr[-4:-1]) # 子字符串索引从 2 到 4
print(pystr[::-1])  # 子字符串逆向输出

等同于下面代码

def print_str(s, start=None, end=None, step=1):
    if step > 0:
        if start == None:
            start = 0
        elif start < 0:
            start = len(s) + start
        elif start > 0:
            start = start
        else:
            raise ValueError('start is bad.')

        if end == None:
            end = len(s)
        elif end < 0:
            end = len(s) + end
        elif end > 0:
            end = end
        else:
            raise ValueError('end is bad.')
    elif step < 0:
        if start == None:
            start = -1
        elif start < 0:
            start = start
        elif start > 0:
            start = len(s) - start
        else:
            raise ValueError('start is bad.')

        if end == None:
            end = -len(s) - 1
        elif end < 0:
            end = end
        elif end > 0:
            end = len(s) - end
        else:
            raise ValueError('end is bad.')
    elif step == 0:
        raise ValueError('step cannot be zero.')

    print('start=%d, end=%d, step=%d' % (start, end, step))
    for i in range(start, end, step):
        print(pystr[i], sep='', end='')
    print()

print_str(pystr, start=2, end=5)   # 子字符串索引从 2 到 4
print_str(pystr, end=2)    # 子字符串索引从 0 到 1
print_str(pystr, start=3)    # 子字符串索引从 3 到字符串末尾
print_str(pystr, start=3, end=-1)  # 子字符串索引从 3 到 4
print_str(pystr, start=-4, end=-1) # 子字符串索引从 2 到 4
print_str(pystr, step=-1)  # 子字符串逆向输出
print_str(pystr, step=0)  # 抛出异常

列表

可以将列表当成普通的 “数组”,它能保存任意数量任意类型的 Python 对象。和数组一样,通过从 0 开始的数字索引访问元素,但是列表可以存储不同类型的对象。

列表元素用中括号([])包裹,元素的个数及元素的值可以改变。通过切片运算([]和[:])可以得到子集,这一点与字符串的使用方法一样。

pylist = [1, 2, 3, 4]

# 打印列表
print(pylist)

# 列表索引
print(pylist[0])
print(pylist[-1])

# 列表切片
print(pylist[2:])
print(pylist[:3])

# 列表长度
print(len(pylist))

# 列表元素赋值
pylist[0] = 10

元组

元组与列表相似。

元组元素用小括号(())包裹,不可以更改(尽管他们的内容可以)。元组可以看成是只读的列表。通过切片运算([]和[:])可以得到子集,这一点与字符串的使用方法一样。

pytuple = ('robots', 77, 93, 'try')

# 打印元组
print(pytuple)

# 元组索引
print(pytuple[0])
print(pytuple[-1])

# 元组切片
print(pytuple[2:])
print(pytuple[:3])

# 元组长度
print(len(pytuple))

# 元组不能修改
pytuple[0] = 10 # 抛出异常,元组不能赋值

字典

字典是 Python 中的映射数据类型,工作原理类似 Perl 中的关联数组或哈希表,由键-值(key-value)对构成。

几乎所有类型的 Python 对象都可以用作键,不过一般还是以数字或者字符串最为常用。

值可以是任意类型的 Python 对象。

字典元素用大括号({})包裹,每个元素是一个键值对。

pydict = {'ip': '10.0.0.1'}

# 添加键值对
pydict['port'] = 80

# 打印字典
print(pydict)

# 字典元素
print(pydict['port'])

集合

Python 中的集合类型,表示元素是唯一的。

用法类似于列表,但不支持索引和切片操作

pyset = {1, 2, 2, 3, 4, 5, 6}

# 打印集合
print(pyset)

# 集合元素数量
print(len(pyset))

代码块及缩进对齐

代码块通过缩进对齐表达代码逻辑,而不是使用大括号。因为没有了额外的字符,程序的可读性更高。而且缩进完全能够清楚地表达一个语句属于哪个代码块。当然,代码块也可以只有一个语句组成。

对一个 Python 初学者来说,仅使用缩进可能令他诧异。人们通常竭力避免改变,因此对那些使用大括号很多年的人来说,初次使用纯缩进来表示逻辑也许会多少感到有些不够坚定(不用大括号?到底成不成啊?)。然而回想一下,Python有两大特性,一是简洁,二是可读性好。如果你实在讨厌使用缩进作为代码分界,我们希望你从现在开始,半年后再来看一下这种方式。也许你会发现生活中没有大括号并不会像你想像的那么糟糕。

if 语句

标准 if 条件语句的语法如下:

if expression1:
	...
elif expression2:
	...
elif expressio3:
	...
else:
	...

while 语句

标准 while 条件循环语句的语法类似if,语法如下:

while expression:
	...

for 循环 和 range() 函数

Python 中的 for 接受可迭代对象(例如序列或迭代器)作为其参数,每次迭代其中一个元素。

标准 for 循环语句的语法如下:

for item in range(...):
	...

文件 和 函数 open()、file()

如何打开文件

handle = open(file_name, access_mode = 'r')

file_name 变量包含我们希望打开的文件的字符串名字,
access_mode 中 'r’表示读取,‘w’ 表示写入,‘a’ 表示添加。其他可能用到的标识还有 '+'表示读写,‘b’ 表示二进制访问。如果未提供 access_mode, 默认值为 ‘r’。
如果 open() 成功,一个文件对象句柄会被返回。所有后续的文件操作都必须通过此文件句柄进行。
当一个文件对象返回之后,我们就可以访问它的一些方法,比如 readlines() 和 close()。文件对象的方法属性也必须通过句点属性标识法访问。

下面有一些代码,提示用户输入文件名,然后打开一个文件,并显示它的内容到屏幕上。

filename = input('Enter file name: ')
fread = open(filename, 'r')
for each_line in fread:
	print(each_line)
fread.close()

错误和异常

编译时会检查语法错误,不过 Python 也允许在程序运行时检测错误。当检测到一个错误,Python 解释器就引发一个异常,并显示异常的详细信息。程序员可以根据这些信息迅速定位问题并进行调试,并找出处理错误的办法。

要给你的代码添加错误检测及异常处理,只要将它们 “封装” 在 try-except 语句当中 try 之后的代码组,就是你打算管理的代码 except 之后的代码组,则是你处理错误的代码。

try:
	filename = input('Enter file name: ')
	fread = open(filename, 'r')
	for each_line in fread:
		print(each_line)
	fread.close()
except IOError as e:
	print('file open error:', e)

程序员也可以通过使用 raise 语句故意引发一个异常。

函数

类似于其他语言,Python中的函数使用小括号(())调用。函数在调用之前必须先定义。如果函数中没有return语句,就会自动返回None对象。

Python是通过引用调用的。这意味着函数内对参数的改变会影响到原始对象。不过事实上只有可变对象会受此影响,对不可变对象来说,它的行为类似按值调用。

# 定义函数
def addMe2Me(x):
	''' apply + operation to argument '''
	return (x + x)

# 调用函数
addMe2Me(4.25)
addMe2Me(10)
addMe2Me('Python')
addMe2Me([-1, 'abc'])

是面向对象编程的核心,它扮演相关数据及逻辑容器的角色。它们提供了创建“真实”对象(也就是实例)的蓝图。因为Python并不强求你以面向对象的方式编程(与Java不同),此刻你也可以不学习类。不过我们还是在这儿放了些例子,以方便感兴趣的读者浏览。

# 定义类
class FooClass(object):
	""" my very first class: FooClass """
	version = 0.1 # 类属性
	
	def __init__(self, name='John Doe'):
		""" 构造函数 """
		self.name = name # 实例属性
		print('Created a class instance for', name)
	
	def showname(self):
		""" 显示实例属性和类名 """
		print('Your name is', self.name)
		print('My name is', self.__class__.__name__)
		
	def showver(self):
		""" 显示类(静态)属性 """
		print(self.version) # 参考 FooClass.version

	def addMe2Me(self, x): # 不使用 'self'
		""" apply + operation to argument """
		return x + x
	
# 使用类
foo1 = FooClass()
foo1.showname()
foo1.showver()
print(foo1.addMe2Me(5))
print(foo1.addMe2Me('xyz'))

foo2 = FooClass('Jane Smith')
foo2 = showname()

模块

模块是一种组织形式,它将彼此有关系的 Python 代码组织到一个个独立文件当中。模块可以包含可执行代码、函数和类,或者这些东西的组合。

当你创建了一个 Python 源文件,模块的名字就是不带 .py 后缀的文件名。一个模块创建之后,你可以从另一个模块中使用 import 语句导入这个模块来使用。

# 导入模块
import sys

# 访问模块的函数、变量等
sys.stdout.write('Hello World!\n')
print(sys.platform)
print(sys.verion)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值