行走中的蒸汽机
改变 | 思考 | 探索
王山山
破卷如有神
展开
-
分析H5下Android与iOS中input的disabled样式
在对input的disabled样式进行修改后,两者不同系统中显示不同,是因为两者对disabled的解读不同。默认情况下// Androidbackground-color: rgb(235, 235, 238);// iOSopacity: 0.3;解决方案对不同终端的默认值均进行修改,背景色以及透明度。input:disabled{ background-color: #595959; opacity: 1;}(最后更新时间:2020年11月11日)...原创 2020-11-11 17:54:36 · 331 阅读 · 0 评论 -
模板与操作符重载
关于大小的模板函数#include <iostream>#include <string>using namespace std;template<class U, class V>bool MyGreater(U &u, V &v){ return u > v;}class Student{ char name...原创 2019-09-08 10:53:19 · 280 阅读 · 1 评论 -
traits技术
STL标准模板库非常强调软件的复用,traits的中文意思就是特性,traits就像特性萃取机,提取不同类的共性,以便能统一处理。traits依靠显式模板特殊化来把代码中因类型不同而发生变化的片段拖出来,用统一的接口来包装。已知整型数组类CIntArray,浮点数组类CFloatArray,求整型或浮点数组的和乘以相应倍数并输出。#include <iostream>usin...原创 2019-09-08 10:18:08 · 490 阅读 · 1 评论 -
遵循异常处理的几点基本原则、避免finally中可能发生的陷阱
每个异常都是某个类的实例。一些内置的异常类类名描述Exception几乎所有的异常类都是从它派生而来的AttributeError引用属性或给它赋值失败时引发OSError操作系统不能执行指定的任务时引发,有多个子类IndexError使用序列中不存在的索引时引发,为LookupError的子类KeyError使用映射中不存在的键时引发,为...原创 2019-08-23 17:37:47 · 539 阅读 · 0 评论 -
Python基础教程:文件
位于自动导入的模块io中,提供和接收数据。函数open:返回一个文件对象。 | 写入文件后将其关闭,以确保数据得以写入磁盘。open(filename, filemode)文件模式:r读取、w截断写入、a附加、t文本、+读写、b二进制、x独占写入(文件存在引发异常)默认模式为rt,使用UTF-8编码。文件的基本方法read:读取write:写入readl...原创 2019-08-23 17:36:05 · 129 阅读 · 0 评论 -
理解枚举替代实现的缺陷
Python3.4以前并不提供枚举类型,于是人们利用Python的动态性这个特征,想出了枚举的各种替代实现方式。使用类属性class Seasons: Spring, Summer, Autumn, Winter = range(4)print(Seasons.Summer) # 1借助函数def enum(*args, **kwargs): retur...原创 2019-08-23 17:35:06 · 348 阅读 · 0 评论 -
Python基础教程:闭包
使用一个函数来创建另一个函数,一个函数位于另一个函数中,且外面的函数返回里面的函数,而不是调用它。重要的是,返回的函数能够访问其定义所在的作用域。每当外部函数被调用时,都将重新定义内部的函数。像存储其所在作用域的函数称为闭包。name = 'watkins'# “遮盖”问题:局部变量或参数与要访问的全局变量同名,可使用函数globals来访问全局变量def combine(name): ...原创 2019-08-23 17:33:44 · 126 阅读 · 0 评论 -
使用with自动关闭资源
对文件操作完成后应该立即关闭它们,一种比较古老的方法是try_finally块,但Python提供了一种更为简单的解决方案:with语句。with语句的语法为:with 表达式 [as 目标]: 代码块with语句支持嵌套,支持多个with子句,它们两者可以相互转换。# 多个with子句with expr1 as e1, expr2 as e2: pass# 嵌套形...原创 2019-08-23 17:32:33 · 631 阅读 · 0 评论 -
Python基础教程:装饰器
Python装饰器是拓展原函数功能的一种函数,返回值也是一个函数。在不更改原函数的代码的前提下,使用运算符@。用于包装任何可调用的对象,并且可用于方法和函数。带有参数的装饰器带有不定参数的装饰器多个装饰器def deco(func): def wrapper(*args, **kwargs): func(*args, **kwargs) r...原创 2019-08-23 17:31:40 · 260 阅读 · 0 评论 -
Python基础教程:生成器
生成器的函数是包含关键字yield的函数,它在被调用时返回一个生成器,即一种特殊的迭代器。要与活动的生成器交互,可使用方法send、throw和close。def flatten(nested): try: for sublist in nested: for element in flatten(sublist): ...原创 2019-08-23 17:30:01 · 242 阅读 · 1 评论 -
单例模式
使用__new__方法class Singleton(object): def __new__(cls, *args, **kwargs): if not hasattr(cls, '_instance'): bef = super(Singleton, cls) cls._instance = bef.__new__(...原创 2019-08-23 17:28:46 · 83 阅读 · 0 评论 -
分清staticmethod和classmethod的使用场景
Python中的静态方法(staticmethod)和类方法(classmethod)都依赖于装饰器(decorator)来实现。其中静态方法的用法如下:class Pen(object): @staticmethod def write(arg1, arg2): pass而类方法的用法如下:class Toy(object): @classmet...原创 2019-08-23 17:27:25 · 1262 阅读 · 0 评论 -
方法解析顺序MRO
方法解析顺序MRO:多个超类的超类相同时,查找特定方法或属性时访问超类的顺序。Python每一个有父类的类都有一个与方法解析顺序相关的特殊属性__mro__,其是一个元组,含有方法解析时的对象查找顺序,越靠前的优先级就越高。Python的方法解析顺序:实例本身instance、类class、超类(继承关系越近就越先定义,优先级就越高)。class Math(object): def ...原创 2019-08-23 17:26:23 · 237 阅读 · 0 评论 -
Python基础教程:抽象基类
抽象类是不能(至少是不应该)实例化的类,其职责是定义子类应实现的一组抽象方法。抽象基类用于指定子类必须提供哪些功能,却不实现这些功能。抽象基类有两个特点:规定继承类必须具有抽象基类指定的方法、抽象基类无法实例化。基于这两个特点,抽象基类主要用于接口设计。使用模块abc可创建抽象基类。使用@abstractmethod来将方法标记为抽象的,即在子类中必须实现的方法。from abc impo...原创 2019-08-23 17:25:12 · 196 阅读 · 0 评论 -
记住函数传参既不是传值也不是传引用
Python中函数传值到底是传值还是传引用呢?下面逐一讨论主流的3个观点:传引用、传值、可变对象传引用,不可变对象传值。传引用def inc(num): print(id(num)) num += 1 print(id(num))num = 21print(id(num)) # 1628139152inc(num)# 1628139152# 1628...原创 2019-08-23 17:24:01 · 192 阅读 · 0 评论 -
Python基础教程:函数式编程
Python提供了一些有助于进行函数式编程的函数:map、filter和reduce。# 使用map将序列中的所有元素传递给函数print(list(map(int, '2019 04 11'.split()))) # [2019, 4, 11]# 使用filter根据布尔函数的返回值来对元素进行过滤print(list(filter(lambda s: s%2==0, range(10...原创 2019-08-23 17:22:55 · 99 阅读 · 0 评论 -
使用else子句简化循环
在Python中,不仅分支语句有else子句,而且循环语句也有,甚至连异常处理也有。# while-else形式while expression: suiteelse: suite# for-else形式for target_list in expression_list: suiteelse: suiteelse子句提供了隐含的对循环是否由bre...原创 2019-08-23 17:21:57 · 573 阅读 · 0 评论 -
分清==与is的使用场景
==用来检查两个对象是否相等,而is用来检查两个对象是否相同(是同一个对象)。警告:不要将is用于数和字符串等不可变的基本值。x = [1, 2, 3]y = [2, 1]del x[2]y.reverse()print(x == y, x is y) # True False# id()函数可以查看变量在内存中具体的存储空间print(id(x), id(y)) # 24...原创 2019-08-23 17:20:55 · 235 阅读 · 0 评论 -
深入理解None,正确判断对象是否为空
Python中以下数据会当作空来处理:常量None常量False任何形式的数值类型零,如0、0L、0.0、0j空的序列,如''、()、[]空的字典,如{}当用户定义的类中定义了nonzero()方法和len()方法,并且该方法返回整数0或者布尔值False的时候常量None的特殊性体现在它就是一个空值对象。其数据类型为NoneType,遵循单例模式,是唯一...原创 2019-08-23 17:19:50 · 563 阅读 · 0 评论 -
Lazy evaluation
Lazy evaluation常被译为“延迟计算”或“惰性计算”,指的是仅仅在真正需要执行的时候才计算表达式的值。充分利用Lazy evaluation的特性带来的好处主要体现在以下两个方面:避免不必要的计算,带来性能上的提升。```pythonabbreviations = ['Ali', 'JD', 'alpha', 'byte', 'theta']company = []f...原创 2019-08-23 17:18:31 · 2412 阅读 · 0 评论 -
垃圾回收机制
Python GC主要使用引用计数来跟踪和回收垃圾。在引用计数的基础上,通过标记-清除解决容器对象可能产生的循环引用问题,通过分代回收以空间换时间的方法提高垃圾回收效率。Python采用的是引用计数机制为主,标记-清除和分代收集两种机制为辅的策略。引用计数PyObject是每个对象必有的内容,其中ob_refcnt就是引用计数。当一个对象有新的引用时,它的ob_refcnt就会增加,当引用它...原创 2019-08-23 17:17:31 · 120 阅读 · 0 评论 -
Python基础教程:字典
映射让你能够使用任何不可变的对象(最常用的是字符串和元组)来标识其元素。字典是Python中唯一的内置映射类型。在字典中,键必须是独一无二的。可使用函数dict从其他映射或键-值对序列创建字典。person = [('name', 'watkins'), ('age', '42'), ('school', 'swjtu')]pDict = dict(person)print(pDict) ...原创 2019-08-23 17:39:25 · 196 阅读 · 0 评论 -
Python基础教程:列表
列表是可变的,即可修改其内容。使用函数list可以利用字符串来创建列表。print(list('watkins')) # ['w', 'a', 't', 'k', 'i', 'n', 's']# 要将字符列表转换为字符串,可使用''.join(somelist)print(''.join(['w', 'a', 't', 'k', 'i', 'n', 's'])) # watkins基...原创 2019-08-23 17:15:25 · 217 阅读 · 0 评论 -
连接字符串应优先使用join而不是+
Python中的字符串为不可变对象,一旦创建便不能改变,这个特性直接影响到Python中字符串连接的效率。name, address, school = "watkins", "siso", "swjtu"# 使用操作符+print(name + address + school)# 使用join方法print(''.join([name, address, school]))当...原创 2019-08-23 17:39:37 · 248 阅读 · 0 评论 -
深入理解str()和repr()的区别
str(object):将指定的值转换为字符串。用于转换bytes时,可指定编码和错误处理方式repr(object):返回指定值的字符串表示print(repr("Hello, \nWorld!"))# 'Hello, \nWorld!'print(str("Hello, \nWorld!"))# Hello, # World!函数str()和repr()都可以将Python中...原创 2019-08-23 17:12:43 · 3162 阅读 · 0 评论 -
格式化字符串时尽量使用format()方式而不是%
Python中内置的%操作符和format()方式都可以用于格式化字符串。使用字符串格式设置运算符——百分号%操作符根据转换说明符所规定的格式返回一串格式化后的字符串,转换说明符的基本形式为:%[转换标记][宽度[.精确度]]转换类型。%操作符格式化字符串时有如下几种常见用法:直接格式化字符或者数值以元组的形式格式化以字典的形式格式化print("The %s is ...原创 2019-08-23 17:11:39 · 1883 阅读 · 0 评论 -
Python基础教程:字符串
字符串是不可变的。因此所有的元素赋值和切片赋值都是非法的,会引起TypeError异常。字符串方法模块string中几个很有用的常量。string.digits:包含数字0~9的字符串string.ascii_letters:包含所有ASCII字母(大写和小写)的字符串string.ascii_lowercase:包含所有小写ASCII字母的字符串string.asc...原创 2019-08-23 17:08:34 · 175 阅读 · 0 评论