学习python有些日子了,有些东西和C++、java的确有很大差别,于是将些概要的东西整理出来,便于查询。而不求其详细。
先从变量和函数说起,逐步整理完善。
“一切皆对象”是python的一个原则。任何类型、变量、函数、模块都是对象。
一、基本类型
1.整型(Integer):
2.浮点型(float): (1==1.0)是真值
3.复数(complex): c=1+5j == c1=complex(1,5)是真值
4.None类型: 表示出错
5.逻辑表达式:
逻辑运算符:(级别低于比较运算符)
A and B #与。A为假,就返回表达式A的值。A为真,就返回表达式B的值。
A or B #或。A、B的表达式都为真,结果是A;
#如果是一真一假,返回真值表达式的值;
#都是假(空值和0的情况),结果是B(的0或空值)。
not #非。not a == b 就是 not (a == b),
比较运算符:
x == y #x等于y
x != y #x不等于y
x > y #x大于y
x < y #x小于y
x >= y #x大于等于y
x <= y #x小于等于y
and-or技巧(实现c语言的bool ? a:b)
>>> a = ""
>>> b = "second"
>>> bool = 1
>>> (bool and [a] or [b])[0] #注意[]的用意在于保证a的表达式为TRUE,不影响运算结果
二、函数
1.函数定义
def function_name(
):
#代码块要缩进
return ... #函数没有返回值类型定义,return可返回任意类型,或无返回值
#函数可以嵌套函数
2.函数的参数传递
函数参数不需定义类型,若类型不匹配,函数代码可抛异常。
函数参数是按地址引用传递的。但由于local namespace的原因,好像对简单变量是按值传递的。
缺省值参数(可选参数):
def SetPosition(name,height=170,weight=70):
>>>SetPosition("my cup")
可变数量参数:(想想c语言中的main(int argc, char *argv[]),printf())
按tuple方式传递多个参数(任意参数):
def printf(format,*arg): #*arg必须为最后一个参数。
#*表示接受任意个参数,并将其之后的变量生成tuple传递给函数
>>>printf("hello", "my",2,["dog","pig"])
按dictionary方式传递多个参数(任意带名字参数):
def printf(format,**keyword): #**表示接收任意个key,value式的参数,生成字典传给函数
>>>printf("dict format", One=1,Two=2,Three=3)
#本例keys是["One","Two","Three"],values是[1,2,3]
几种混合时,先后排序为:
固定参数,缺省值参数,*arg,**keyword。
3.函数的属性
函数也是对象,函数名可以象普通变量一样给其他变量赋值(C语言的函数指针的意味)
__doc__属性,#函数定义的第一个表达式是str的话,就是其__doc__,可作帮助提示。
4.函数的作用域
遵循LGB原则(调用优先级为local,global,builtin)
5.lambda函数
函数式编程语言中很基础的东西,可看为一行的匿名函数。
>>>f = lambda a,b: a+b #等价于 def f(a,b): return a+b
6.python的一些内置函数(只列关于对象属性的,类型转换等其他的没列出)
type() #显示值和变量的类型。
id() #以值或变量为参数,返回值是一整数,它表示值或变量的唯一标识符。该值与内存地址相关。
dir() #显示包括类,对象实例,文件,列表,复数等等类型的属性和方法。
#需要该对象有__dict__,__members__和__methods__属性
hasattr() #函数测试一个对象是否有特定的属性。
getattr() #取回某个对象属性的值。
setattr() #为某个对象添加新的属性和值。
delattr() #删除对象的某个属性。
isinstance()#测试一个对象是否为另一个类的实例。
issubclass()#测试一个类是否为另一个类的子类。