Python类属性和方法的调用

Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的。

一、类、对象概述
在面向对象程序设计中,把数据以及对数据的操作封装在一起,组成一个整体(对象),不同对象之间通过消息机制来通信或者同步。对于相同类型的对象进行分类、抽象后,得出共同的特征而形成了类。
类的抽象具体包括两个方面:
1.数据抽象:描述某类对象共有的属性或状态。
2.过程抽象:描述某类对象共有的行为或功能操作。
在python中,使用类来定义同一种类型的对象。类是广义的数据类型,能够定义复杂数据的特性,包括:
1.静态特性(即数据抽象):创建类时用变量形式表示对象特征的成员称为属性(数据成员)。
2.动态特性(即行为抽象,也就是对数据的操作方法):用函数形式表示对象行为的成员称为成员方法,数据成员和成员方法统称为类的成员。
类是实现代码复用和设计复用的一个重要方法,封装、继承、多态是面向对象程序设计的三个要素。
类是生成对象的抽象模板,对象是根据类创建出来的一个个具体的实例。
二、类的定义与使用
Python使用class关键字来定义类,class关键字之后是一个空格,接下来是类的名字,如果派生自其它基类的话则需要把所有父类放到一对圆括号中并使用逗号分隔,然后是一个冒号,*后换行并定义类的内部实现。
类名的首字母一般要大写。
class Car(object): #定义一个类,派生自object类(所有类的祖先,定义类时不存在其他父类就写object)
can_move=True #定义类属性
def infor(self): #定义成员方法
print(“This is a car”)
1
2
3
4
类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的*个参数名称, 按照惯例它的名称是 self(self代表类的实例,而非类;self 不是 python 关键字,我们把他换成其他也是可以正常执行的)。
三、类属性和类方法的调用
定义了类之后,就可以用来实例化对象,并通过“对象名.成员”的方式来访问其中的数据成员或成员方法。

>>>spring=Bird() #实例化对象
>>>print(Bird.have_feather) #通过类名调用属性
>>>print(Bird.have_head) #通过对象名调用属性
>>>spring.move() #通过对象名调用方法
>
1
2
3
4
5

类方法大体分为 3 类,分别是类方法、实例方法和静态方法,其中实例方法用的是*多的。我们知道,实例方法的调用方式其实有 2种,既可以采用类对象调用,也可以直接通过类名调用。
通常情况下,我们习惯使用类对象调用类中的实例方法。但如果想用类调用实例方法,不能像如下这样:

class Study:
def info(self):
print(“学 Python”)
#通过类名直接调用实例方法
Study.info()
1
2
3
4
5
运行上面代码,程序会报出如下错误:

Traceback (most recent call last):
File “D:\python3.6\demo.py”, line 5, in <module>
Study.info()
TypeError: info() missing 1 required positional argument: ‘self’
1
2
3
4
其中,*后一行报错信息提示我们,调用 info() 类方式时缺少给 self 参数传参。这意味着,和使用类对象调用实例方法不同,通过类名直接调用实例方法时,Python 并不会自动给 self 参数传值。
读者想想也应该明白,self 参数需要的是方法的实际调用者(是类对象),而这里只提供了类名,当然无法自动传值。

因此,如果想通过类名直接调用实例方法,就必须手动为 self 参数传值。例如修改上面的代码为:

class Study:
def info(self):
print(“学 Python”)
clang = Study()
#通过类名直接调用实例方法
Study.info(clang)
1
2
3
4
5
6
再次运行程序,结果为:

学 Python
1
可以看到,通过手动将 clang 这个类对象传给了 self 参数,使得程序得以正确执行。实际上,这里调用实例方法的形式完全是等价于 clang.info()。

值得一提的是,上面的报错信息只是让我们手动为 self 参数传值,但并没有规定必须传一个该类的对象,其实完全可以任意传入一个参数,例如:

class Study:
def info(self):
print(self,”学 Python”)
#通过类名直接调用实例方法
Study.info(“zhangsan”)
1
2
3
4
5
运行结果为:

zhangsan 学 Python
1
可以看到,“zhangsan” 这个字符串传给了 info() 方法的 self 参数。显然,无论是 info() 方法中使用 self 参数调用其它类方法,还是使用 self 参数定义新的实例变量,胡乱的给 self 参数传参都将会导致程序运行崩溃。

总的来说,Python 中允许使用类名直接调用实例方法,但必须手动为该方法的*个 self 参数传递参数,这种调用方法的方式被称为“非绑定方法”。
用类的实例对象访问类成员的方式称为绑定方法,而用类名调用类成员的方式称为非绑定方法。
(此处参考)

四、私有成员与公有成员
私有成员在类的外部不能直接访问,一般是在类的内部进行访问和操作,或者在类的外部通过调用对象的公有成员方法来访问,而公有成员是可以公开使用的,既可以在类的内部进行访问,也可以在外部程序中使用。
从形式上看,在定义类的成员时,如果成员名以两个下划线开头但是不以两个下划线结束则表示是私有成员,否则就不是私有成员。
Python并没有对私有成员提供严格的访问保护机制,通过一种特殊方式“对象名._类名__xxx”也可以在外部程序中访问私有成员,但这会破坏类的封装性,不建议这样做。

在Python中,以下划线开头的变量名和方法名有特殊的含义,尤其是在类的定义中。
_xxx:受保护成员;
__xxx__:系统定义的特殊成员;
__xxx:私有成员,只有类对象自己能访问,子类对象不能直接访问到这个成员,但在对象外部可以通过“对象名._类名__xxx”这样的特殊方式来访问。
1
2
3
注意:Python中不存在严格意义上的私有成员。
————————————————

Python类的定义与使用

Python类的定义与使用

 

目标:

1.类的定义

2.父类,子类定义,以及子类调用父类

3.类的组合使用

4.内置功能

 

1.类的定义

代码如下:

 

  1. #!/usr/bin/env python
  2. #coding:utf8
  3. class Hotel(object):
  4. “””docstring for Hotel”””
  5. def __init__(self, room, cf=1.0, br=15):
  6. self.room = room
  7. self.cf = cf
  8. self.br = br
  9. def cacl_all(self, days=1):
  10. return (self.room * self.cf + self.br) * days
  11. if __name__ == ‘__main__’:
  12. stdroom = Hotel(200)
  13. big_room = Hotel(230, 0.9)
  14. print stdroom.cacl_all()
  15. print stdroom.cacl_all(2)
  16. print big_room.cacl_all()
  17. print big_room.cacl_all(3)

 

2.父类、子类以及调用父类

代码如下:

 

  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. # 父类
  4. class AddBook(object):
  5. def __init__(self, name, phone):
  6. self.name = name
  7. self.phone = phone
  8. def get_phone(self):
  9. return self.phone
  10. # 子类,继承
  11. class EmplEmail(AddBook):
  12. def __init__(self, nm, ph, email):
  13. # AddBook.__init__(self, nm, ph) # 调用父类方法一
  14. super(EmplEmail, self).__init__(nm, ph) # 调用父类方法二
  15. self.email = email
  16. def get_email(self):
  17. return self.email
  18. # 调用
  19. if __name__ == “__main__”:
  20. Detian = AddBook(‘handetian’, ‘18210413001’)
  21. Meng = AddBook(‘shaomeng’, ‘18210413002’)
  22. print Detian.get_phone()
  23. print AddBook.get_phone(Meng)
  24. alice = EmplEmail(‘alice’, ‘18210418888’, ‘alice@xkops.com’)
  25. print alice.get_email(), alice.get_phone()

 

3.类的组合使用

代码如下:

 

 

  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. ”’
  4. 1.class类的组合使用
  5. 2.手机、邮箱、QQ等是可以变化的(定义在一起),姓名不可变(单独定义)。
  6. 3.在另一个类中引用
  7. ”’
  8. class Info(object):
  9. def __init__(self, phone, email, qq):
  10. self.phone = phone
  11. self.email = email
  12. self.qq = qq
  13. def get_phone(self):
  14. return self.phone
  15. def update_phone(self, newphone):
  16. self.phone = newphone
  17. print “手机号更改已更改”
  18. def get_email(self):
  19. return self.email
  20. class AddrBook(object):
  21. ”’docstring for AddBook”’
  22. def __init__(self, name, phone, email, qq):
  23. self.name = name
  24. self.info = Info(phone, email, qq)
  25. if __name__ == “__main__”:
  26. Detian = AddrBook(‘handetian’, ‘18210413001’, ‘detian@xkops.com’, ‘123456’)
  27. print Detian.info.get_phone()
  28. Detian.info.update_phone(18210413002)
  29. print Detian.info.get_phone()
  30. print Detian.info.get_email()

 

 

 

4.内置功能(函数()加与不加的区别)

代码如下:

 

 

  1. #!/usr/bin/env python
  2. #coding:utf8
  3. class Books(object):
  4. def __init__(self, title, author):
  5. self.title = title
  6. self.author = author
  7. def __str__(self):
  8. return self.title
  9. def __repr__(self):
  10. return self.title
  11. def __call__(self):
  12. print “%s is written by %s” %(self.title, self.author)
  13. if __name__ == ‘__main__’:
  14. pybook = Books(‘Core Python’, ‘Wesley’)
  15. print pybook
  16. pybook()

 

  1. #!/usr/bin/env python
  2. #coding:utf8
  3. class Number(object):
  4. “””Custum object
  5. add/radd -> +;
  6. sub/rsub -> -;
  7. mul/rmul -> *;
  8. div/rdiv -> /;
  9. “””
  10. def __init__(self, number):
  11. self.number = number
  12. def __add__(self, other):
  13. return self.number + other
  14. def __radd__(self, other):
  15. return self.number + other
  16. def __sub__(self, other):
  17. return self.number – other
  18. def __rsub__(self, other):
  19. return other – self.number
  20. def __gt__(self, other):
  21. if self.number > other:
  22. return True
  23. return False
  24. if __name__ == ‘__main__’:
  25. num = Number(10)
  26. print num + 20
  27. print 30 + num
  28. print num – 5
  29. print 11 – num
  30. print num > 20

 

位于同一局域网段的云服务器怎么购买呢?

要搭建一个集群,必须要求所有节点在同一局域网

现在云服务器怎么做到买的是同一局域网的呢

有些云服务器厂商有虚拟交换机( VSwitch )的配置,虚拟交换机连接的局域网网络性能怎么样呢?

ps: 求推荐性价比高的服务器提供商,配置 4c32g SSD 以上,dmca ignored 或者 offshare *好..

yfwl 1
yfwl 48 天前
内网云服务器很简单的,offshare 可以 dmca ignored 不保证… BASE64:UVEyMzI3Njc3NTk2
calmzhu 2
calmzhu 48 天前 via Android ❤️ 1
aws azure aliyun 华为这些全部有 vpc 网络的 。
opengps 3
opengps 48 天前 via Android ❤️ 1
局域网现在都是用 vpc 实现,买之前提前规划好网关交换机信息,把机器选到这个交换机下
zhuzhibin 4
zhuzhibin 48 天前 via iPhone
VPC
stanchenxxx2015 5
stanchenxxx2015 48 天前
VPC 配一个就妥了
freecloud 6
freecloud 48 天前
/t/751066 腾讯云轻量,同账号同机房,应该是内网直接互通的。二月份,还有免费升配的活动。
lry 7
lry 47 天前
@yfwl
@freecloud
国内的机器都不考虑 一是不方便 二是价钱太贵了 🙂
freecloud 8
freecloud 46 天前
@lry 海外轻量,可以考虑下。24 元 /月起,再加代理折扣。
yfwl 9
yfwl 45 天前
有海外的.. 谁说没有,海外内网也很简单

百度UEditor粘贴或插入的表格不显示边框的解决办法

这个方法是我自己研究出来的。

编辑器里面可以看到表格有边框,在前台页面展示出来的却没有边框。

修改办法:

打开ueditor.all.js

1、找到下面的代码,修改

utils.each(tables, function (table) {
removeStyleSize(table, true);
domUtils.removeAttributes(table, [‘style’]); //改这里,原来是 [‘style’, ‘border’]
utils.each(domUtils.getElementsByTagName(table, “td”), function (td) {
if (isEmptyBlock(td)) {
domUtils.fillNode(me.document, td);
}
removeStyleSize(td, true);
});
});
这是为了不让UEditor去掉粘贴的表格的边框,也就是table元素的border属性(不是border内联样式)

2、UEditor插入的表格实际是没有边框的,编辑器中看到边框,其实是因为编辑器里面(<iframe>中)有下面这个全局css
td,th{ border:1px solid #DDD; }
但是前台展示是没有这段全局css的,所以导致看不到边框。

我们可以让编辑器中无边框的表格,显示成虚线灰色的边框,这也是其他很多html编辑器的处理方式。

找到并修改下面的代码

utils.cssRule(‘table’,
//选中的td上的样式
‘.selectTdClass{background-color:#edf5fa !important}’ +
‘table.noBorderTable td,table.noBorderTable th,table.noBorderTable caption{border:1px dashed #ddd !important}’ +
//插入的表格的默认样式
‘table{margin-bottom:10px;border-collapse:collapse;display:table;}’ +
‘td,th{padding: 5px 10px;border: 1px dashed #DDD;}’ + //这里修改 1px solid #DDD 为 1px dashed #DDD
‘caption{border:1px dashed #DDD;border-bottom:0;padding:3px;text-align:center;}’ +
‘th{border-top:1px dashed #BBB;background-color:#F7F7F7;}’ + //这里修改 1px solid #BBB 为 1px dashed #BBB
‘table tr.firstRow th{border-top-width:2px;}’ +
‘.ue-table-interlace-color-single{ background-color: #fcfcfc; } .ue-table-interlace-color-double{ background-color: #f7faff; }’ +
‘td p{margin:0;padding:0;}’, me.document);
目的是让全局的td/th边框样式显示为灰色虚线

3、*后就是table上右键菜单中有个”表格-设置表格边线可见”的功能。这个功能会让表格显示出实线边框,实际前台展示也是有边框的。

现在td是有实线边框的,可是th却还是虚线,所以要改下面的代码,增加一段对th的处理

注意:th就是表格标题列/行。可以用右键菜单”表格-插入表格标题列/行”插入th

execCommand: function () {
var table = getTableItemsByRange(this).table;
utils.each(domUtils.getElementsByTagName(table,’td’),function(td){
td.style.borderWidth = ‘1px’;
td.style.borderStyle = ‘solid’;
td.style.borderColor = ‘windowtext’;
});
//增加下面一段
utils.each(domUtils.getElementsByTagName(table,’th’),function(th){
th.style.borderWidth = domUtils.getComputedStyle(th, “border-width”);
th.style.borderStyle = ‘solid’;
th.style.borderColor = ‘windowtext’;
});
}

*后如果你用的是ueditor.all.min.js,需要将改过的代码压缩一份min版本。

————————————————

VScode连接远程服务器上的jupyter notebook

工欲善其事,必先利其器,开发工具这个东西觉得折腾下还是有好处的。但常常感觉专门抽出时间搞这个浪费时间,更常见的现象是已经明显感觉到当前的开发工具用的很别扭,而且告诉自己等这个忙完了要搭一个更方便的工具,到*后却没下文了直到下次再次遇到这种感觉。我这会就是再次遇到了,想用VSCode连接服务器上的jupyter notebook运行tensorflow代码,这样在本地的VScode中直接写代码就方便了很多。整个过程很简单,我自诩记性也不错,但还是不如这白纸黑字来的保险,查资料也是很花时间的。

首先是本机与服务器之间配置ssh就不仔细描述了,要是忘了google一下“ssh远程登录服务器”大把都是资料而且大多数说的都是对的。但*好在~/.ssh/config中按照下面的样子再配置下,ssh用起来会更方便的。

%title插图%num

接下来是vscode这边要能远程连接到服务器上,记住不是在本地写代码然后再发送到服务器上,而是直接连接到了服务器的某个路径下,VScode对文件的增删改查就相当于是操作了服务器上这个路径下的对应文件(也许说的比较啰嗦,但是觉得概念还是要清楚的)。实现这个目的只需要3步:

1、在扩展(EXTENSIONS)中搜插件Remote – SSH安装后再重新启动VScode。
2、鼠标点击VScode左下角的齿轮选择命令模式(command paletten),mac对应的快捷键是shift+cmd+p。
3、在VScode顶部中间弹出的下拉菜单中输入Remote – SSH点击图片中选中的选项,接下来再点击你要连接的服务器的名字就行了,*后会弹出一个新的VSCode。
vscode现在就可以远程连接服务器了,如果想写python代码,直接创建文件就可以了。

%title插图%num

%title插图%num

而服务器这边要能够创建jupyter noteboot,也就是些安装了,不难就是找起来有点麻烦。我喜欢用conda安装一个虚拟环境就是因为隔离了干净省心,真要是搞坏了直接删了重新建一个。服务器上的操作也只需要3步:

1、安装虚拟环境:

conda create –name notebook python=3.6
2、激活虚拟环境并安装jupyter notebook:

source activate notebook
conda install -c conda-forge jupyter notebook
3、创建一个notebook服务:

sudo jupyter notebook –port=8889 –allow-root
结果如下:*下面的两个URL就是刚才启动的服务的地址,我复制http://localhost:8889/?token=aef9a514fa484b83aa4554371024ebc5b50bbed25c2521ab,当然复制另一个也没问题。

%title插图%num

*后在已经连接到服务器的VScode中进入命令模式,点击下图下拉菜单中被选中的选项(好绕口,理解就好)。意思也很明显:指定一个本地或者远程的jupyter服务连接。

%title插图%num

把刚才复制的URL粘贴进去,按回车。

%title插图%num

创建一个jupyter文件测试下:

%title插图%num

整个过程就这么简单而且内容也不多,但就是写了快两个小时吧,正好有今晚有时间就整理一下,以后就不需要google再去各种找了。后面几张大图看起来好丑,感觉以后要学一些有关排版设计的内容了,忽然想起自己曾今自学了一段时间PS,好久没用这会好像也忘差不多了。回头自己读刚才写的blog隐隐约约有种很着急的感觉,不知道是思维还是文笔的锅,总之有时间就多写写,“感觉”也是可以慢慢积累的呢~。

Spring MVC+Mybatis常见错误及解决

1

org.apache.ibatis.binding.BindingException: Parameter 'username' not found. Available parameters are [0, 1, param1, param2]

出现这个错误是由于在执行sql的时候无法匹配sql语句的通配符造成的,有两个解决方法:
<1>、在对应dao的xml文件的sql语句要这样写

<select id=”findByUsernameAndPassword” resultType=”com.lzcc.model.User”>
select * from user where username = #{0} and password = #{1};
</select>
1
2
3
<2>、在dao接口的方法中的参数中添加@param注解
————————————————

List<User> findByUsernameAndPassword(@Param(“username”) String username,@Param(“password”) String password) throws SQLException;
————————————————

Python是什么

Python是什么

python 中文就是蟒蛇的意思。
在计算机中,它是一种编程语言。
Python(英语发音:/ˈpaɪθən/), 是一种面向对象、解释型计算机程序设计语言,由Guido van Rossum于1989年底发明,*个公开发行版发行于1991年。Python语法简洁而清晰,具有丰富和强大的类库。它常被昵称为胶水语言,它能够把用其他语言制作的各种模块(尤其是C/C++)很轻松地联结在一起。常见的一种应用情形是,使用Python快速生成程序的原型(有时甚至是程序的*终界面),然后对其中有特别要求的部分,用更合适的语言改写,比如3D游戏中的图形渲染模块,性能要求特别高,就可以用C++重写。
1,发展历程编辑
自从20世纪90年代初Python语言诞生至今,它逐渐被广泛应用于处理系统管理任务和Web编程。Python[1] 已经成为*受欢迎的程序设计语言之一。2011年1月,它被TIOBE编程语言排行榜评为2010年度语言。自从2004年以后,python的使用率是呈线性增长[2] 。
由于Python语言的简洁、易读以及可扩展性,在国外用Python做科学计算的研究机构日益增多,一些知名大学
已经采用Python教授程序设计课程。例如卡耐基梅隆大学的编程基础和麻省理工学院的计算机科学及编程导论就使用Python语言讲授。众多开源的科学
计算软件包都提供了Python的调用接口,
例如著名的计算机视觉库OpenCV、三维可视化库VTK、医学图像处理库ITK。而Python专用的科学计算扩展库就更多了,例如如下3个十分经典的
科学计算扩展库:NumPy、SciPy和matplotlib,它们分别为Python提供了快速数组处理、数值运算以及绘图功能。因此Python语
言及其众多的扩展库所构成的开发环境十分适合工程技术、科研人员处理实验数据、制作图表,甚至开发科学计算应用程序。
说起科学计算,首先会被提到的可能是MATLAB。然而除了MATLAB的一些专业性很强的工具箱还无法替代之外,MATLAB的大部分常用功能都可以在Python世界中找到相应的扩展库。和MATLAB相比,用Python做科学计算有如下优点:
● 首先,MATLAB是一款商用软件,并且价格不菲。而Python完全免费,众多开源的科学计算库都提供了Python的调用接口。用户可以在任何计算机上免费安装Python及其*大多数扩展库。
● 其次,与MATLAB相比,Python是一门更易学、更严谨的程序设计语言。它能让用户编写出更易读、易维护的代码。
● *后,MATLAB主要专注于工程和科学计算。然而即使在计算领域,也经常会遇到文件管理、界面设计、网络通信等各种需求。而Python有着丰富的扩展库,可以轻易完成各种高级任务,开发者可以用Python实现完整应用程序所需的各种功能。%title插图%num
2,产生
Python的创始人为Guido van Rossum。1989年圣诞节期间,在阿姆斯特丹,Guido为了打发圣诞节的无趣,决心开发一个新的脚本解释程序,做为ABC 语言的一种继承。之所以选中Python(大蟒蛇的意思)作为程序的名字,是因为他是一个叫Monty Python的喜剧团体的爱好者。
ABC是由Guido参加设计的一种教学语言。就Guido本人看来,ABC
这种语言非常优美和强大,是专门为非专业程序员设计的。但是ABC语言并没有成功,究其原因,Guido 认为是非开放造成的。Guido
决心在Python 中避免这一错误。同时,他还想实现在ABC 中闪现过但未曾实现的东西。
就这样,Python在Guido手中诞生了。可以说,Python是从ABC发展起来,主要受到了Modula-3(另一种相当优美且强大的语言,为小型团体所设计的)的影响。并且结合了Unix shell和C的习惯。
3,风格
Python在设计上坚持了清晰划一的风格,这使得Python成为一门易读、易维护,并且被大量用户所欢迎的、用途广泛的语言。
设计者开发时总的指导思想是,对于一个特定的问题,只要有一种*好的方法来解决就好了。这在由Tim
Peters写的Python格言(称为The Zen of Python)里面表述为:There should be one– and
preferably only one –obvious way to do it. 这正好和Perl语言(另一种功能类似的高级动态语言)的中心思想TMTOWTDI(There’s More Than One Way To Do It)完全相反。
Python的作者有意的设计限制性很强的语法,使得不好的编程习惯(例如if语句的下一行不向右缩进)都不能通过编译。其中很重要的一项就是Python的缩进规则。
一个和其他大多数语言(如C)的区别就是,一个模块的界限,完全是由每行的首字符在这一行的位置来决定的(而C语言
是用一对花括号{}来明确的定出模块的边界的,与字符的位置毫无关系)。这一点曾经引起过争议。因为自从C这类的语言诞生后,语言的语法含义与字符的排列
方式分离开来,曾经被认为是一种程序语言的进步。不过不可否认的是,通过强制程序员们缩进(包括if,for和函数定义等所有需要使用模块的地方),Python确实使得程序更加清晰和美观。
4,设计定位
Python的设计哲学是“优雅”、“明确”、“简单”。因此,Perl语言中“总是有多种方法来做同一件事”的理念在Python开发者中通常是难以忍受的。
Python开发者的哲学是“用一种方法,*好是只有一种方法来做一件事”。在设计Python语言时,如果面临多种选择,Python开发者一般会拒*
花俏的语法,而选择明确的没有或者很少有歧义的语法。由于这种设计观念的差异,Python源代码通常被认为比Perl具备更好的可读性,并且能够支撑大
规模的软件开发。这些准则被称为Python格言。在Python解释器内运行import this可以获得完整的列表。
Python开发人员尽量避开不成熟或者不重要的优化。一些针对非重要部位的加快运行速度的补丁通常不会被合并到Python内。所以很多人认为Python很慢。不过,根据二八定律,大多数程序对速度要求不高。在某些对运行速度要求很高的情况,Python设计师
倾向于使用JIT技术,或者用使用C/C++语言改写这部分程序。可用的JIT技术是PyPy。
Python是完全面向对象的语言。函数、模块、数字、字符串都是对象。并且完全支持继承、重载、派生、多继承,有益于增强源代码的复用性。Python支持重载运算符和动态类型。相对于Lisp这种传统的函数式编程语言,Python对函数式设计只提供了有限的支持。有两个标准库(functools, itertools)提供了Haskell和Standard ML中久经考验的函数式程序设计工具。
虽然Python可能被粗略地分类为“脚本语言”(script language),但实际上一些大规模软件开发计划例如Zope、Mnet及BitTorrent,Google也广泛地使用它。Python的支持者较喜欢称它为一种高级动态编程语言,原因是“脚本语言”泛指仅作简单程序设计任务的语言,如shellscript、VBScript等只能处理简单任务的编程语言,并不能与Python相提并论。
Python本身被设计为可扩充的。并非所有的特性和功能都集成到语言核心。Python提供了丰富的API和
工具,以便程序员能够轻松地使用C语言、C++、Cython来编写扩充模块。Python编译器本身也可以被集成到其它需要脚本语言的程序内。因此,很
多人还把Python作为一种“胶水语言”(glue
language)使用。使用Python将其他语言编写的程序进行集成和封装。在Google内部的很多项目,例如Google
Engine使用C++编写性能要求*高的部分,然后用Python或Java/Go调用相应的模块。《Python技术手册》的作者马特利(AlexMartelli)说:“这很难讲,不过,2004 年,Python 已在 Google 内部使用,Google 召募许多 Python高手,但在这之前就已决定使用Python,他们的目的是 Python where we can, C++ where we
must,在操控硬件的场合使用 C++,在快速开发时候使用 Python。”

iOS图标&启动图生成器(一)

前 言
一个完整的app都需要多种尺寸的图标和启动图。一般情况下,设计师需要根据开发者提供的一套规则,设计出各种尺寸的图标和启动图供开发人员使用。

但*近作者利用业余时间做了个app,因为不希望耽误设计师较多时间,希望能自己来搞定各种尺寸的图标,就只跟设计师要了*大尺寸的图标和启动图各一个。本想着找一下现成的工具,批量生成需要的的图片,但*后没有找到,只好自己使用Photoshop切出了不同尺寸的图片。

这期间还换过一次图标和启动图,作者就重复了切图工作,这花费了大量的时间。于是事后,作者开发了一个mac app——图标&启动图生成器(简称生成器)以提高工作效率。作者用两篇文章分别介绍生成器的使用和实现细节。

本篇文章介绍生成器的功能和使用方式。

01 生成器功能介绍
根据原图一键生成整套规则的图片;

支持选择所需要的平台规则;

支持选择/输入图片导出路径;

自动打开导出的图片文件夹。

02 生成器支持的平台
截止本篇文章发布,生成器v0.3版本共支持12套平台规则。

iPhone AppIcons(iPhone app 图标规则)

iPhone LaunchImages Portrait(iPhone app 竖屏启动图规则)

iPhone LaunchImages Landscape(iPhone app 横屏启动图规则)

iPad AppIcons(iPad app 图标规则)

iPad LaunchImages Portrait(iPad app 竖屏启动图规则)

iPad LaunchImages Landscape(iPad app 横屏启动图规则)

Mac AppIcons(Mac app 图标规则)

Watch AppIcons(Apple Watch app 图标规则)

CarPlay AppIcons(CarPlay app 图标规则)

Android AppIcons(Android app 常用图标规则)

Android LaunchImages Portrait(Android app 常用竖屏启动图规则)

Android LaunchImages Landscape(Android app 常用横屏启动图规则)

03 生成器界面介绍
在了解了生成器的基础功能后,来看看生成器的界面。如下图。
%title插图%num

生成器的界面比较简洁,控件元素按照从上到下、从左到右的顺序分别为:

图片框(承载源图片)

平台选择器(供选择平台规则)

路径按钮(供选择图片导出路径)

路径文本框(显示选择的路径,支持直接输入路径)

导出按钮(在目标路径中生成符合所选定的平台规则的图片,并打开路径文件夹)

04 生成器使用步骤
生成器的使用步骤非常简单,这里以此生成器app的图标生成过程为例进行介绍。

1、准备源图片
此生成器是一个mac app,需要10种尺寸的图标,如下图。

%title插图%num
其中,所需要的*大图标的尺寸为1024*1024。作者需要准备好这张*大尺寸的图片,并拖拽到图片框中作为源图片。

2 、选择平台规则
作者需要生成符合mac app图标规则的所有图标图片,所以这里选择Mac AppIcons。

3、选择导出路径
这时,点击导出按钮已经能够将源图片切成所需要的一套图片了。但在这之前,选择一个合适的图片导出路径,会便于作者管理生成的图片。另外,对文件路径规则比较熟悉的同学可以直接输入路径。

4、导出图片
点击导出按钮可以在目标路径中生成符合所选定平台规则的图片,并打开这些图片所在的文件夹以供使用。

按照以上4步,可以快速得到所需要的符合各种平台规则图标和启动图。

05 获取app资源

给天下的小白科普一下iOS和安卓的区别

IOS与安卓的区别:
1、两者运行机制不同:IOS采用的是沙盒运行机制,安卓采用的是虚拟机运行机制。
2、两者后台制度不同:IOS中任何第三方程序都不能在后台运行;安卓中任何程序都能在后台运行,直到没有内存才会关闭。
3、IOS中用于UI指令权限*高,安卓中

指令权限*高。iphone沙盒机制解释:应用程序位于文件系统的严格限制部分,程序不能直接访问其他应用程序。以杀毒软件中的

解释一下。“沙盒”技术是发现可疑行为后让程序继续运行,当发现的确是病毒时才会终止。“沙盒”技术的实践运用流程是:让疑似病毒文件的可疑行为在虚拟的“沙盒”里充分表演,“沙盒”会记下它的每一个动作;当疑似病毒充分暴露了其病毒属性后,“沙盒”就会执行“回滚”机制:将病毒的痕迹和动作抹去,恢复系统到正常状态。

机制解释:android本身不是为触摸屏打造的,所以所有的应用都是运行在一个虚拟的环境中,由底层传输数据到虚拟机中,再由虚拟机传递给用户UI,任何程序都就可以轻松访问其他程序文件。

是开源的,但是由于版本的不同意,各式各样的系统都有,界面会比IOS的好看些。软件方面:苹果的软件靠ITUNES赚钱还需要相应的许可所以相对而言质量要比较高一些。 安卓软件可以随便开发随便弄软件质量会不是很高,但是也有精品的软件。
由于安卓是开源的,软件和硬件不是一体的,所以可以刷不同的ROM,适合喜欢研究手机的人。
Android抗衡iOS还是有些力不从心,比如在移动应用开发者的收入方面,平台的整合度,操作的流畅度等。尤其在企业级市场,几乎已被iOS全面占领,新兴的企业都表示更加青睐iOS而非所谓“开放”、基于

而在另一方面你还有Android。它开源,生态环境开放,市场也开放。而把这些都融合起来还是Google,这家Android平台的开发者本身也是一家广告公司。

droid是google公司做的手机系统,ios是苹果公司做的手机系统。
droid手机系统的手机很多厂家公司在做如HTC,三星,中兴等等。。。 ios只有苹果公司的手机和数码产品才会是ios的手机系统。
droid手机系统和ios软件开发工具不同,平台不同。软件也不用,所以两个两个平台的软件不能通用,但是好的软件都会有两个系统版本,如QQ 有IOS版也是就iphoneQQ,和android版QQ。
两个系统都是现在智能手机上*火的系统,也是*有发展的系统。
安卓手机完全开源,任何软件开发商或者个人都能开发安卓的软件。苹果IOS完全封源开发
正是由于开源和各个品牌手机硬件差异*大,导致安卓手机的系统体验各有差异,软件兼容性也不如IOS。所以安卓手机总体的系统体验,流畅度,软件兼容性,明显不如系统和软件开发都对硬件有*其针对性的IOS,软件数量也不如IOS,游戏数量也不如IOS,而且很多高质量软件,特别是游戏都是先出现在IOS上。不过常用的大公司的软件,比如二楼说的QQ,不会出现上述问题。
安卓系统的软件几乎都是免费,而IOS的软件和游戏,好的基本都付费,当然苹果可以越狱,越狱后也是免费使用。
安卓手机支持FLASH,可以玩QQ农场,不过需要高端安卓机2.2以上系统才支持。IOS不支持FLASH,只支持HTML5,所以苹果上不能看FLASH,甚至苹果有时候连HTML5的视频兼容性也不好。
安卓手机使用起来上手快,下载歌曲电影等直接放到手机里就能看,IOS则需要同步到手机中,不过越狱后也能直接放到手机里看。

Flink之checkpoint和savepoint的区别

1.什么是Checkpoint
Checkpoint:一种由 Flink 自动执行的快照,其目的是能够从故障中恢复。Checkpoint 使 Flink 的状态具有良好的容错性,通过 checkpoint 机制,Flink 可以对作业的状态和计算位置进行恢复。
Checkpoint 对于用户层面,是透明的,用户会感觉程序一直在运行。 用户无法对其进行交互,用户可以在程序启动之前,设置好实时程序 Checkpoint 相关参数,当程序启动之后,剩下的就全交给 Flink 自行管理。
(1)checkpoint的目录结构: 由元数据文件、数据文件(与 state backend 相关)组成。可通过配置文件中 “state.checkpoints.dir” 配置项来指定元数据文件和数据文件的存储路径,实际系统中一般存储在hdfs上。
(2)checkpoint的两种mode:Exactly Once 和 At least Once。默认的 Checkpoint 模式是 Exactly Once. Exactly Once 和 At least Once 具体是针对 Flink 状态 而言。

Exactly Once 含义是:保证每条数据对于 Flink 的状态结果只影响一次。打个比方,比如:在统计”flink”这个单词数时,目前实时统计的 个数为2,同时这个结果在这次 Checkpoint 成功后保存在相应的存储路径下。在下次 Checkpoint 之前, 又来1个”flink”单词,突然程序遇到外部异常容错自动回复,从*近的Checkpoint 点开始恢复,那么会从单词书为2这个状态开始恢复,所以即使程序遇到外部异常自我恢复,也不会影响到 Flink 状态的结果。
At Least Once 含义是:每条数据对于 Flink 状态计算至少影响一次。比如在单词统计”flink”
时,你统计到的某个单词的单词数可能会比真实的单词数要大,因为同一条消息,你可能将其计算多次。
(3)checkpoint的保留:在默认的情况下仅用于恢复失败的作业,并不保留,当程序取消时 checkpoint 就会被删除。当然,你可以通过配置来保留 checkpoint,这些被保留的 checkpoint 在作业失败或取消时不会被清除。

CheckpointConfig config = env.getCheckpointConfig();
config.enableExternalizedCheckpoints(ExternalizedCheckpointCleanup.RETAIN_ON_CANCELLATION);
1
2
ExternalizedCheckpointCleanup 配置项定义了当作业取消时,对作业 checkpoint 的操作:

ExternalizedCheckpointCleanup.RETAIN_ON_CANCELLATION:当作业取消时,保留作业的
checkpoint。注意,这种情况下,需要手动清除该作业保留的 checkpoint。
ExternalizedCheckpointCleanup.DELETE_ON_CANCELLATION:当作业取消时,删除作业的
checkpoint。仅当作业失败时,作业的 checkpoint 才会被保留。
2.什么是Savepoint
Savepoint:用户出于某种操作目的(例如有状态的重新部署/升级/缩放操作)手动(或 API 调用)触发的快照。
Savepoint 是依据 Flink checkpointing 机制所创建的流作业执行状态的一致镜像。 你可以使用 Savepoint 进行 Flink 作业的停止与重启、fork 或者更新。 Savepoint 由用户创建,拥有和删除。 他们的用例是计划的,手动备份和恢复。当然,Savepoint 必须在作业停止后继续存在。
Savepoint 由两部分组成: 稳定存储(列入 HDFS,S3,…) 上包含二进制文件的目录(通常很大),和元数据文件(相对较小)。 稳定存储上的文件表示作业执行状态的数据镜像。 Savepoint 的元数据文件以(*对路径)的形式包含(主要)指向作为 Savepoint 一部分的稳定存储上的所有文件的指针

3.两者之间的区别
1.目的:checkpoint重点是在于自动容错,savepoint重点在于程序修改或者更新后从状态中恢复
2.触发者:checkpoint是flink自动触发,而savepoint是用户主动触发
3.状态文件保存:checkpoint一般都会自动删除;savepoint一般都会保留下来,除非用户去做相应的删除操作
————————————————

友情链接: SITEMAP | 旋风加速器官网 | 旋风软件中心 | textarea | 黑洞加速器 | jiaohess | 老王加速器 | 烧饼哥加速器 | 小蓝鸟 | tiktok加速器 | 旋风加速度器 | 旋风加速 | quickq加速器 | 飞驰加速器 | 飞鸟加速器 | 狗急加速器 | hammer加速器 | trafficace | 原子加速器 | 葫芦加速器 | 麦旋风 | 油管加速器 | anycastly | INS加速器 | INS加速器免费版 | 免费vqn加速外网 | 旋风加速器 | 快橙加速器 | 啊哈加速器 | 迷雾通 | 优途加速器 | 海外播 | 坚果加速器 | 海外vqn加速 | 蘑菇加速器 | 毛豆加速器 | 接码平台 | 接码S | 西柚加速器 | 快柠檬加速器 | 黑洞加速 | falemon | 快橙加速器 | anycast加速器 | ibaidu | moneytreeblog | 坚果加速器 | 派币加速器 | 飞鸟加速器 | 毛豆APP | PIKPAK | 安卓vqn免费 | 一元机场加速器 | 一元机场 | 老王加速器 | 黑洞加速器 | 白石山 | 小牛加速器 | 黑洞加速 | 迷雾通官网 | 迷雾通 | 迷雾通加速器 | 十大免费加速神器 | 猎豹加速器 | 蚂蚁加速器 | 坚果加速器 | 黑洞加速 | 银河加速器 | 猎豹加速器 | 海鸥加速器 | 芒果加速器 | 小牛加速器 | 极光加速器 | 黑洞加速 | movabletype中文网 | 猎豹加速器官网 | 烧饼哥加速器官网 | 旋风加速器度器 | 哔咔漫画 | PicACG | 雷霆加速