标签: Python
安装与运行
在Ubuntu下跑的,貌似装了一些软件以后已经有装好的Python了,直接在控制台上输入python2
或者python3
进入相应的版本,第一行即给出了具体的版本号,最新的是Python 2.7.12
或Python 3.5.2
,目前2具有更好的兼容性。
python
写的程序为*.py
,终端进入对应文件夹下python2 *.py
即可运行。
另外又装了一款多平台IDE, Pycharm,在Windows里跑很方便。
标识符
以下划线开头的标识符是有特殊意义的。以单下划线开头(_foo
)的代表不能直接访问的类属性,需通过类提供的接口进行访问,不能用”from xxx import *”而导入;以双下划线开头的__foo
代表类的私有成员;以双下划线开头和结尾的__foo__
代表python里特殊方法专用的标识,如__init__()
代表类的构造函数。
基本语法
和C相比而言,有几处不同:
- 冒号表示段落的开始。用缩进代替花括号,但必须严格缩进一样数量的空格。建议你在每个缩进层次使用 单个制表符 或 两个空格 或 四个空格 , 切记不能混用。错误提示
IndentationError: unindent does not match any outer indentation level
使用斜杠(
\
)将一行的语句分为多行显示,而[]
,{}
或()
括号就不需要。注释符
#
或者三引号
。在同一行中使用多条语句,语句之间使用分号(
;
)分割,行末可以不加。
输入输出
x=input()
x=input("Please input a digit")
print x
print 'abc'
print 3
在IDE中要支持中文,必须在设置中改变编码类型为UTF-8
,并在行首加
# coding=utf-8
如果还是报错,注意这句话等号两边都不要加空格!
input
:会根据用户的输入来做类型的转换
raw_input
:则会把用户的输入都作为一个字符串来处理(所见即所得)
def input(prompt):
return eval(raw_input(prompt))
# eval(str)用来计算在字符串中的有效Python表达式,并返回一个对象
# 两次都输入3+5
x = input("x:")
print x # 输出8
y = raw_input("y:")
print y # 输出3+5
输出类似于C中sprintf的写法
print "My name is %s and weight is %d kg!" % ('Zara', 21)
解决py2会自动输出回车的方法
from __future__ import print_function # 用py3的print的写法
print(x, end="") # 表示结束符不用回车
也可以对整个文件做处理,新建文件、写入内容、删除文件。系统指令很多,要用时查表。
fo = open("a.cpp", "wb") # 打开/新建文件
fo.write("a=10\nprint a") # 写入内容
fo.write(r'''
#include <bits/stdc++.h>
int main(){
int x, y;
while(~scanf("%d%d", &x, &y))
printf("%d + %d = %d\n", x, y, x+y);
return 0;
}
''') # r可以避免转义字符生效
fo.close() # 关闭文件
import os # 载入os库
os.remove("a.cpp") # 移除文件
内置对象
简单类型:int
long
float
complex
bool
容器类型:string
list
tuple
变量赋值不需要类型声明。
可以为多个对象指定多个变量。例如下面两句话等价,前面的赋值更加简洁。
a, b, c = 1, 2, "john"
a = 1; b = 2; c = "John"
要调用一些数学变量和常用函数,先载入头文件再调用
import math
math.pi
math.sin(x)
help(math)
help(math.acos)
可以进行复数运算
x=2+3j 或 complex(2, 3)
y=4+7j
x/y
string使用方便
Python 接收单引号( '
)、双引号( "
)、三引号( '''
或 """
) 来表示字符串,引号的开始与结束必须的相同类型的。
其中三引号可以引用多行。
+
表示连接,*
表示重复。
a = "python"
print a[2:5]*2+a[0]+a[2:]
列表[]等价于C语言里的数组
+
表示连接,*
表示重复。
list = [4,5,'pp']
len(list) # 读取容量大小
list.append(x) # 塞入x
元组()类似于列表,但只读,不能二次赋值,系统会报错
tuple = (4,5,'pp')
ct = list(tuple) # 元组转换到列表,可进行二次赋值
tt = tuple(ct) # 反之,将列表转换到元组
元字典{}等价于C++里的map
dict = {}
dict['one'] = "This is one" # dict[key] = value
dict[2] = "This is two"
tinydict = {'name': 'john','code':6734, 'dept': 'sales'}
# dict = {key : value}
print dict['one'] # 输出键为'one' 的值
print dict[2] # 输出键为 2 的值
print tinydict # 输出完整的字典
print tinydict.keys() # 输出所有键
print tinydict.values() # 输出所有值
删除对象
del a
运算符
和C差不多的就不赘述了,记一些不一样的
//
等价于对除法结果取floor()
**
等价于pow()
~
求补运算
<>
即!=
逻辑运算符用单词直接给
and
or
not
一些测试运算符,非常接近正常语言
in
not in
成员是否属于某一类
is
is not
对象实体一致性
循环语句
设置了while...else...
以及for...else...
正常循环时,执行while
或者for
后会执行else
,但如果中途跳出,则不能执行else
。
for
循环迭代体有多种设置方式
x = [**, **, **]
for y in x: **** # y作为迭代对象
for index in range(len(x)): **** # index为数组下标,range返回一个序列数组
时间函数
import time
time.time() # 自从1970年1月1日0点经过了多少秒
time.localtime() # 化到struct_time元组
time.asctime() # 能友好显示当地时间
print time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) # 2017-02-15 15:09:42
函数
定义函数后调用,其中参数都是直接引用的,和C不同。
def 函数名(参数x, y, z, *var):
“一些说明”
函数体
return ***
调用函数时可以选择一一对应传入参数;也可以打乱顺序指定变量名,此时也可省略一些参数。其中*表示参数数量不确定,传入多个以后会保存在元组var里。
函数名(xx, yy, zz)
函数名(y=yy, x=xx, z=zz)
lambda函数
lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。
sum = lambda arg1, arg2: arg1 + arg2;
模块
在同一目录下生成新文件xxx.py
,在其他python文件下调用函数只需
import xxx
xxx.function()
dir(xxx) # 查看xxx.py里的函数
想在模块里使用全局变量,则先声明后再使用
global var
异常
异常类型系统已有定义。也可以用户自定义。为了保证代码出错时不会立刻停止,
try:
# 一段试着被执行的代码
fh = open("testfile", "w")
fh.write("这是一个测试文件,用于测试异常!!")
except IOError:
# 当try里的内容出现错误,则在下面的except里找对应错误
print "Error: 没有找到文件或读取文件失败"
else:
# 不出现错误则执行
print "内容写入文件成功"
fh.close()
其他功能
可扩展:如果你需要一段运行很快的关键代码,或者是想要编写一些不愿开放的算法,你可以使用C或C++完成那部分程序,然后从你的Python程序中调用。