读写文件是最常见的IO操作。Python内置了读写文件的函数,用法和C是兼容的。
读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘,所以,读写文件就是请求操作系统打开一个文件对象(通常称为文件描述符),然后,通过操作系统提供的接口从这个文件对象中读取数据(读文件),或者把数据写入这个文件对象……继续阅读 »
3年前 (2020-04-30) 1039浏览 0评论
0个赞
Python的官方文档很多都有示例代码,比如re模块就带了很多示例代码:
>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
……继续阅读 »
3年前 (2020-04-29) 984浏览 0评论
0个赞
在过去的二十年中,编程一直是需求最大,收入最高的职业技能之一,并且需求不停地在增加。除了这种需求和在市场上的受欢迎程度之外,作为开发人员的工作还提供了很大的灵活性。您可以在任何地方工作,为世界各地的项目做贡献。所有这些原因使软件开发与自由职业者的生活方式高度契合。
但是,对于起步的人,可能很难决定要花费数百小时来掌握哪种编程语言。先抛出结论:不存在最佳的……继续阅读 »
3年前 (2020-04-27) 1029浏览 0评论
1个赞
单元测试是用来对一个模块、一个函数或者一个类来进行正确性检验的测试工作。
比如对函数abs(),我们可以编写出以下几个测试用例:
输入正数,比如1、1.2、0.99,期待返回值与输入相同;
输入负数,比如-1、-1.2、-0.99,期待返回值与输入相反;
输入0,期待返回0;
输入非数值类型,比如None、[]、{},期待抛出TypeError。
把上面的测……继续阅读 »
3年前 (2020-04-27) 1169浏览 0评论
0个赞
和以上其他页面的创建方法类似,在www/templates下创建blog.html:
<!-- 继承父模板 '__base__.html' -->
{% extends '__base__.html' %}
<!--jinja2 title 块内容替换-->
{% block titl……继续阅读 »
3年前 (2020-04-25) 1097浏览 0评论
0个赞
程序能一次写完并正常运行的概率很小,基本不超过1%。总会有各种各样的bug需要修正。有的bug很简单,看看错误信息就知道,有的bug很复杂,我们需要知道出错时,哪些变量的值是正确的,哪些变量的值是错误的,因此,需要一整套调试程序的手段来修复bug。
第一种方法简单直接粗暴有效,就是用print()把可能有问题的变量打印出来看看:
用print()最大的坏……继续阅读 »
3年前 (2020-04-25) 1359浏览 0评论
0个赞
MVVM模式不但可用于Form表单,在复杂的管理页面中也能大显身手。例如,分页显示Blog的功能,我们先把后端代码写出来:
在apis.py中定义一个Page类用于存储分页信息:
class Page(object):
'''
Page object for display pages.
……继续阅读 »
3年前 (2020-04-24) 792浏览 0评论
0个赞
在程序运行的过程中,如果发生了错误,可以事先约定返回一个错误代码,这样,就可以知道是否有错,以及出错的原因。在操作系统提供的调用中,返回错误码非常常见。比如打开文件的函数open(),成功时返回文件描述符(就是一个整数),出错时返回-1
用错误码来表示是否出错十分不便,因为函数本身应该返回的正常结果和错误码混在一起,造成调用者必须用大量的代码来判断是否出错:……继续阅读 »
3年前 (2020-04-24) 822浏览 0评论
0个赞
和创建注册页面类似,日志创建页面的编写也并不复杂。在www/templates下创建manage_blog_edit.html:
<!-- 继承父模板 '__base__.html' -->
{% extends '__base__.html' %}
<!--jinja2 title 块内……继续阅读 »
3年前 (2020-04-22) 664浏览 0评论
0个赞
type()
动态语言和静态语言最大的不同就是函数和类的定义,不是编译时定义的,而是运行时动态创建的。
例如我们要定义一个Hello的class,就写一个hello.py模块:
class Hello(object):
def hello(self, name='world'):
print('Hel……继续阅读 »
3年前 (2020-04-22) 775浏览 0评论
0个赞