评分 0, 满分 5 星
0 票

Django里的formsets就是一堆forms的集合。form负责把页面上用户的输入,给塞进model里,进而去操作数据库。每个formset都有一个management form, 用来去管理它所包含的forms. 例如forms的总数,初始form的个数(空白form用于给用户填写),可以包含的最大forms数等等。

用formset_factory可以从一个普通的form创建formset. 所谓的普通form, 就是自己定义字段,而不是像modelform一样是从model里自动创建出字段来。

如果想要在前端动态的增加和删除form, 就得去操作management form里管理的那些数据。

https://medium.com/@taranjeet/adding-forms-dynamically-to-a-django-formset-375f1090c2b0

评分 0, 满分 5 星
0 票

https://hackernoon.com/the-magic-behind-python-generator-functions-bc8eeea54220

这几天写爬虫,先是用的单线程,后来改成了多线程,最后终于用到了协程。上面这篇文章讲述了CPython里generator是如何实现的。

简单的来说,function就是一段代码,而closure是保存了变量状态(包括函数局部的变量及它所在context也就是环境的状态)的function,而generator是保存了上一次执行到哪行代码了的function.

评分 0, 满分 5 星
0 票

https://docs.python.org/3/library/functions.html#import

__import__()是一个内部函数,会被import语句所调用,来实现引入模块的功能。所以如果你想改变import的实现,可以import builtins之后把自己定义的版本赋给builtins.__import__就可以了。当然,这是非常hack的做法,99.9%的情况下是用不着的。如果你是想加点钩子的话,用PEP-302里面说的方法会好得多。即使一定要用,用importlib.import_module()也比用__import__()强。

import spam
# 相当于
spam = __import__('spam', globals(), locals(), [], 0)

import spam.ham
# 相当于
spam = __import__('spam.ham', globals(), locals(), [], 0)

from spam.ham import eggs, sausage as saus
# 相当于
_temp = __import__('spam.ham', globals(), locals(), ['eggs', 'sausage'], 0)
eggs = _temp.eggs
saus = _temp.sausage

__import__(nameglobals=Nonelocals=Nonefromlist=()level=0) 几个参数的说明:

  1. level默认是0,是表示只进行absolute import. 1的话就是当import这个模块的时候,被import的模块里的import语句会在相对位置一层里去找(绕口);
  2. fromlist就是import xxx as里面as后面的变量;
  3. globals和locals是什么意思来着?我继续看看。

在python里面几乎一切功能都是靠方法实现的。例如import就是调用了__import__. ojb.attr(dot operator)就是调用了__getattr__().

评分 0, 满分 5 星
0 票

https://stackoverflow.com/questions/12179271/meaning-of-classmethod-and-staticmethod-for-beginner

Python没有方法重载,所以像Java一样多个不同类型参数的构造器无法实现:

class Date {
  Date(int year, int month, int day);
  Date(String yyyyMMdd);
}

用@classmethod的话,python可以这样做:

class Date(object):
  def __init__(self, day=0, month=0, year=0):
    self.day = day
    self.month = month
    self.year = year
  
  @classmethod
  def fromString(cls, dateString):
    # Support the string is like "2019-02-26"
    day, month, year = map(int, date_as_string.split('-'))
    date1 = cls(day, month, year)
    return date1

而@staticmethod, 就跟Java里的static method差不多,是类方法了。比如下面这个验证日期是否正确的方法。

 @staticmethod
    def is_date_valid(date_as_string):
        day, month, year = map(int, date_as_string.split('-'))
        return day <= 31 and month <= 12 and year <= 3999

评分 0, 满分 5 星
0 票

安装了Enlighter插件,可以在Wordpress里插入高亮的代码块。

if __name__ == "__main__":
    import sys
    fib(int(sys.argv[1]))

我应该不停的写,哪怕所写的内容对于当前的互联网来说是绝对的冗余信息。刚刚花了一些时间读三四年前写的日记,比现在要糟糕的多。

无论以后做什么,精通一门计算机语言仍然是绝对必要的。