python语言学习笔记

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
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
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
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
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
-------------本文结束感谢您的阅读-------------