python语言基础知识
python语言基础知识
python是一种极简、开源,面向对象,有着丰富类库(模块)的语言。
*使用编译器将自身等效转换成机器语言的高级语言,通常称为编译型语言;而使用解释器将自身转换成机器语言的高级语言,称为解释型语言,Python 就是解释型编程语言的一种。*c语言、c++、汇编等需要一次性把所以源代码转换为机器码交给计算机使用,这就是编译型语言,需要编译器;而python、js、php、shell等可以一边执行一边转换,不生成可执行程序,为解释型语言,由解释器不断解释。
编译型产生的程序具有“一次编译,无限次使用”特点,但其源码和执行程序却无法跨平台,需要按不同平台另行修改源码。
解释型则需要每次执行的时候转换源码,所以效率低,常应用于应用层面(网站开发、批处理、小工具)。因为解释型语言需要依靠源代码和解释器,所以就特别需要开发环境,也正是因为解释型语言需要依靠源码执行,所以都是开源的,而且具备跨平台的能力。
python由ABC语言发展而来,其可通过库,调用其他语言制作的模块(大部分为c和c++的),由此被称为“胶水”语言。其主要用于web开发、自动化运维、人工智能、网络爬虫、科学计算等方向,另外由于python可调用c++编写的图形模块,也可用于开发游戏。
hello world
print("hello world") //显然,作为解释型语言,其解释器包含了大量的各种方法的库文件,也就不用调入头文件等内容。之用用print函数输出
数据类型及运算符号
?。赋什么值,自动匹配该类型。支持如c语言那样,在print中使用格式化输出(%d、%i之类)以及转义字符。运算上还多了个**代表幂次方计算。如2**4,表示2的四次方。
需要注意逻辑运算符不同,而是and、or、not……
max = a if a>b else b 三目运算。与c语言对比表达式1 ? 表达式2 : 表达式3;,显然含义更加明确。
对于数据集合,python中由列表(list)、元组(tuple)、字典(dict)和集合(set)等方式。其会在内存中占用一块连续的内存。
1 2 3 4 5 6 7 8 9 10 11 12
| a=["http://c.biancheng.net/python/", 1, [2,3,4] , 3.0] //列表可存储任一形式数据 tuple1 = ('Python', 'Java', 'C++', 'JavaScript') //元组,创建后不可修改内容(常量集合?) dict1 = {'a':100, 'b':42, 'c':9} //字典,无序,映射 range1 = range(1, 6) //区间 list1 = list(tuple1) //列表list函数,将一切即可转化为列表 print(list1) //输出列表 print(list1[1]) //访问第二个元素 del list1 //删除列表,python自动回收内存,可删除某个元素或某段元素 list1.append('a') //添加元素()可任意元素。extend()逐个添加、insert(位置,内容)插入、 list1.index() //查询列表指定元素,可指定查询范围。
|
python流程控制(略)
循环
1 2 3 4 5
| print("计算 1+2+...+100 的结果为:") result = 0 for i in range(101): //逐个获取从 1 到 100 这些值,并做累加操作 result += i //range生成一系列连续整数 print(result)
|
函数
自定义函数
1 2 3 4 5 6 7 8 9 10 11
| def my_len(str): //自定义 len() 函数 ''' 这里是说明文档 ''' length = 0 for c in str: //一个一个字符传递给c length = length + 1 return length length = my_len("http://c.biancheng.net/python/") print(length) \#print(my_len.__doc__) //调用函数说明文档,显示给使用者
|
值得注意
1 2 3 4 5 6 7
| def add(a,b): c = a + b return c c = add(3,4) print(c) //这样调用函数返回值也可以调用到函数流程。注意 print(add(3,4))
|
另外,函数内部还可以定义局部函数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| def outdef (): //全局函数 def indef(): //定义局部函数 print("调用局部函数") return indef new_indef = outdef() //将内部局部函数通过调用全局的方式放出来 new_indef() //现在可以在外部调用了。需要注意局部和外部函数之间的同名变量可能会因为遮蔽而报错
def nth_power(exponent): //#闭包函数,其中 exponent 称为自由变量。这类内部函数闭包让递归镶套函数书写可读性更佳。(并不觉得) def exponent_of(base): return base ** exponent return exponent_of //返回值是 exponent_of 函数 square = nth_power(2) //计算一个数的平方,外部函数,值放入exponent cube = nth_power(3) //计算一个数的立方 print(square(2)) //通过调用返回值,调用内部的函数,值以base放入。计算 2 的平方 print(cube(2)) //计算 2 的立方
|
类与对象
定义
1 2 3 4 5 6 7 8 9 10 11
| class CLanguage : name = "C语言中文网" //# 下面定义了2个类变量 add = "http://c.biancheng.net" def say(self, content): //下面定义了一个say实例方法 print(content) print(CLanguage.name) //使用类名直接调用 print(CLanguage.add) CLanguage.name = "Python教程" //修改类变量的值 CLanguage.add = "http://c.biancheng.net/python" print(CLanguage.name) print(CLanguage.add)
|
越看越像某结构体
1 2 3 4
| class CLanguage: def info(self): print(self,"正在学 Python") CLanguage.info("zhangsan") //通过类名直接调用实例方法。这里传入值给了self。
|
封装
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| class CLanguage : //创建类 def setname(self, name): //写名方法 if len(name) < 3: raise ValueError('名称长度必须大于3!') self.__name = name def getname(self): //读名方法 return self.__name //name私有化 name = property(getname, setname) def setadd(self, add): //写网址方法 if add.startswith("http://"): //限制方法 self.__add = add else: raise ValueError('地址必须以 http:// 开头') def getadd(self): return self.__add add = property(getadd, setadd) def __display(self): //定义个私有方法。包括了两个封装量 print(self.__name,self.__add) clang = CLanguage() //为类创建实例 clang.name = "C语言中文网" clang.add = "http://c.biancheng.net" print(clang.name) print(clang.add)
|
通过对setname()和setadd()方法进行适当设计,可避免用户对类中属性的不合理操作。而该类中没有提供操作私有方法__display()的,即可保护__display()在外部不可调用。
继承
1 2 3 4 5 6 7 8
| class Shape: def draw(self,content): print("画",content) class Form(Shape): //继承 def area(self): #.... print("此图形的面积为...")
|
多继承即多个父类,java、c#等因为多继承可能因父类同名方法等存在冲突。而python中按顺序,前面的覆盖后面父类的同名属性
1 2
| class Person(People, Animal): //多继承 pass
|