本文分析python下面几个显蓍特点
1. python基本特点及运行问题
2. python开发工具包
3. 代码块问题
4. 方法重载问题
5. 继承与多态问题
6. package-from-import-main函数问题
有时需要引用外部开发工具包,pyhon提供了自动集成环境,类似java的maven或gradle工具。
这里有一个问题,就是下载国外工具包时,网不通,或网速慢,解决办法是采用国内镜像。有下面几个国内镜像
清华:https://pypi.tuna.tsinghua.edu.cn/simple
阿里云:http://mirrors.aliyun.com/pypi/simple/
中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/
华中理工大学:http://pypi.hustunique.com/
山东理工大学:http://pypi.sdutlinux.org/
豆瓣:http://pypi.douban.com/simple/
镜像文件配置如下(win10,其他没有测试过)
c:\users\自己的用户名\pip\pip.ini
[global]
index-url=http://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host=mirrors.aliyun.com
一次只能加载一个镜像地址
安装一个不存在外部包方法是
pip install 包名称
例如
pip install pyqt5
pip install lxml
。。。
如果外部安装包己下载到本地,则下面方法安装
pip install 某某外部包.whl
后缀为.whl
python语言没有{},或begin…end,而是采用代码块对齐,如果对齐有错,则就类似javascript/java语言的{}放置的位置有错
python称为pep8规则
这一点上是与其他所有语言最大的不同点,依据排版对齐,决定代码块, 也许也在一类中,也许在一个函数中,也许在一段控制语句中,也许下一行代码就是另一个函数等。
重载是方法名称相同,参数类型,或个数不相同,
在java/C++中都有方法重载,在python/javascript中,没有方法重载,
python的类可以写多个构造函数,只有最后一个构造函数才有用,
这里最大的问题时,写多个重名方法,编绎时不出现语法错误。
python变量属于弱类型变量,或无类型变量,有下面特点
同一个变量,可以是任何数据类型,不赋值时,无数据类型,只有在赋值后,才产生数据类型,这一点与java/C++完全不同,后者在定义时,产生数据数据类型,以后一直不能改变,泛型例外。
python有继承,也有多态,他的多态不是java/C++的多态,或python不是严格意义上的多态,示例分析如下
import abc
class A(metaclass=abc.ABCMeta):
@abc.abstractmethod
def add(self,a,b):
pass
class B(A):
def add(self,a,b):
print("class-B add,n=",a,b)
return a+b+1
class C(A):
def add(self,a,b):
print("class-C add,n=",a,b)
return a+b+10
class D():#没有继承A,所以下面add(...)方法,不是类A的多态
def add(self,a,b):
print("class-D add,n=",a,b)
return a+b+100
def add(obj):
n=obj.add(2,3)
print("add,n=",n)
return n;
o1=B();
a=add(o1) #是标准意义上的多态,类A的add方法多态的第1个态
print('a=',a)
'''
上面输出是
class-B add,n= 2 3
add,n= 6
a= 6
'''
o2=C();
b=add(o2) #是标准意义上的多态,类A的add方法多态的第2个态
print('b=',b)
'''
上面输出是
class-C add,n= 2 3
add,n= 15
b= 15
'''
o3=D();
c=add(o3) #不是标准意义上的多态,不类A的add方法多态
print('c=',c)
'''
上面输出是
class-D add,n= 2 3
add,n= 105
c= 105
'''
moduleA1.py,文件内容如下
def add(a,b):
...
class A:
....
moudleB1.py
import moudelA1
n=moduleA1.add(2,3)
o=moduleA.A()
```
3. 前面import 操作也可以改为from moduelA import *
则代码简化为
moudleB1.py,文件内容如下
from moudelA1 import *
#n=moduleA1.add(2,3), #不能再用moudelA1,代码有错
n=add(2,3) #代码OK
#o=moduleA.A() #有错
o=A() #OK
“`
created by 刘明
moudleB1.py,文件内容如下
from moudelA1 import *
#n=moduleA1.add(2,3), #不能再用moudelA1,代码有错
n=add(2,3) #代码OK
#o=moduleA.A() #有错
o=A() #OK
def fun1():
print('我是fun1。。。函数')
def fun2():
print('我是fun2。。。函数')
def fun3():
print('我是fun1。。。函数')
if name==’main‘: #模拟一个main函数运行
fun1() #当然可以是其他任何一个函数
created by 刘明