新建文件:1.py
在文件头写入#!/usr/bin/python 这样就可以直接输入文件名就可以执行python程序
否则的话就要指定python XXX 来指定用python 来执行程序
新建文件按;2.py
import py_compile
py_compile.compile('1.py') 因为两个文件在同一目录下,可以直接编译
设置文件夹权限 chmod -R 755 python/
执行python 2.py
目录下多了一个1.pyc 编译好的python程序文件
或者用命令 python -O -m py_compile 1.py 这儿的O要大写
生成的文件是1.pyo ,这个是经过优化的二进制文件
变量赋值,不用指定类型:SyntaxError :泛指语法错误
a=5
NameError : 变量,函数,类 未被定义
id(a) 查看的是在内存中的地址编码
b=5
这个时候a,b 的内存地址是一样的。
3==3.0 成立 先比较的是数值大小,而不是字符串比较
与或非 and or not关键字
a=raw_input() 等待 表示从输入的内容导入a变量 得到的是一个字符串!!!
强制类型转换a=(int)raw_input()
提示输入:a=(int)raw_input("please input num1:")
type(a) 查看a 的数据类型
num2=123L 把123 强制存储为长整形
f1=12.0 表示存储成浮点值
复数类型 用j表示虚部 k=3,14j
字符串 定义用‘xxxx’ “xxx” ”“” xxx “”“” 三重引号都会记录下所有在三重引号内的操作。包括换行,tab,都会被记录
三重引号还用做程序注释
转意符号\" \'
\n 换行
特别注意:下标从0开始;str[0:3]不包含下标为3的字符。
字符串 切片 a[0:4] 表示从第一位取到第四位 !!!!!
a[:4] 表示3之前的都要被取到 !!!!!
a[::2]表示隔两个间隔取值!!!!
a[-1] 表示取出倒数第一个的值!!!!
不管正负但是都是从左往右取值!!!!
a[::-1]要从右往左一个一个取值!!!!
len(a) 这个求长度
*n 重复n次
‘a’ in a 判断a数组中有么有‘a’
cmp (a,b)比较两个字符串比较大小 ,字母比数字大
元组:t=(“milo”,30,"male")
同样可以索引和切片,元组值不可变
但是可以全部改变 t=(“milo”,31,"male") 不让单个改变
即使 只有一个元素的元组,一定要跟上一个逗号, t=(3,)!!!!!
分别赋值 name,age,gender=t
序列:列表是可变的
list=['milo',30,'male']
list[0]='luis' 是被允许的空间
改变后的存储空间是不变的
IndexError 索引错误
list.append('xxxx') 添加
list.remove('xxxx') 这里删除发现内容的第一个 或者 del (list[1])
zip(t1,t2) 表示从两个列表中依次取值,然后组成一个新的列表
字典类型:
dic=['name':'luis','age':25,'gender','male']
dic['name']
遍历字典 for k in dic
print dic[k]
字典增加很方便 (无序的) dic['tel']='123455'\
删除 del dic['tel']
弹出 dic.pop('age') 弹出后字典里就没有这个值了
dic.clear 清空字典
del(dic) 删除字典
dic.get(k,'error') 取字典中的值,如果不存在的话返回error
if expression: 注意冒号
action 注意四个空格表示缩进 IndentationError 缩进错误
elif:
nnnn
else:
llll
for iterating_var in sequence: 序列可以是:列表,字符串,元组,或者一些表达式,
statements(s)
range(100) 生成0-99 的序列!!!!!
range(初始值,终值,步长) 终值要比预想值的边界多一
xrange(100) 返回的是迭代的对象,不占内存空间
函数:
def add(a,b):
c=a+b
print c
# 表示注释
写在程序前头#coding:utf8 程序里就可以使用中文了
def machine(x,y='444') : 这里定义的y 就是一个默认值,调用的时候y可以不传值了
调用传值的时候,传参数总是对应位置,对应变量赋值,
原则:定义函数参数时候,右边的尽量设成默认参数,左边的设置成非默认参数
函数内部的局部变量不会覆盖全局变量的内容(会隐藏全局变量内容??),局部变量只能在函数内部使用
在函数体里写出global y 可以强制声明为全局变量,这样就会覆盖全局变量的内容
求和函数sum([1,2,3,4,5]) 内置函数把序列的内容求和
print "%s,%s" % x,y 把字符串传给对位置的格式符号
def f(x,y):
print "%s,%s" % (x,y)
如果t=('name','luis')
可以这样调用了f(*t) 把参数对应上了
*元组 类似于把元组里的元素一个一个拆开传值导入
注意,如果字典对应的键正好是函数的形参(同名),那么就可以直接用f(**d)来传对应的参数,
字典是无序的,如果不对应,就找不到对应的传值!!!!!!
对于多传参数,或者参数不确定,参数冗余
def f(x,*args):
print x
print args
多余的参数回传入args 中组成一个新的元组
def f(x,*args,**kwargs):
print x
print args
print kwargs
多余的参数回传入args 中组成一个新的元组
f(x=3,y=1)
y=3 被存入kwargs字典中了
参数变量名一定不能重复,调试多用print,真是程序尽量多用return