小编Mik*_*lla的帖子

SQLAlchemy ORM __init__方法vs.

SQLAlchemy ORM教程中,给出以下代码作为将映射到表的类的示例:

>>> from sqlalchemy import Column, Integer, String
>>> class User(Base):
...     __tablename__ = 'users'
...
...     id = Column(Integer, primary_key=True)
...     name = Column(String)
...     fullname = Column(String)
...     password = Column(String)
...
...     def __init__(self, name, fullname, password):
...         self.name = name
...         self.fullname = fullname
...         self.password = password
...
...     def __repr__(self):
...        return "<User('%s','%s', '%s')>" % (self.name, self.fullname, self.password)
Run Code Online (Sandbox Code Playgroud)

如果name,fullname并且password__init__实例化类时由方法中的用户设置,那么将它们声明为Column对象(即作为类变量)是什么意思?我不明白SQLAlchemy如何以及何时能够使用这些信息 - 它是通过 …

python sqlalchemy

6
推荐指数
1
解决办法
6535
查看次数

elisp阶乘计算给出了错误的结果

如果我在emacs-lisp中编写此函数:

(defun factorial (n)
  (if (<= n 1)
      1
      (* n (factorial (- n 1)))))
      => factorial
Run Code Online (Sandbox Code Playgroud)

它适用于像5或10这样的小数字,但如果我尝试计算(因子33),答案是-1211487723752259584,这显然是错误的,所有大数字都会破坏这个功能.在python中,这不会发生.是什么导致了这个问题?

emacs elisp

5
推荐指数
3
解决办法
958
查看次数

Rust的Arc和Rc类型与垃圾收集有何不同?

Rust编程语言,第一版说Rust没有垃圾收集器:

它没有垃圾收集器就维持了这些目标

但是,在讨论选择保证时,它还说:

Rc<T>是引用计数指针.换句话说,这让我们有多个"拥有"指向同一数据的指针,当所有指针都超出范围时,数据将被删除(析构函数将被运行).

据我所知,这正是指针在Python等垃圾收集语言中的工作原理.

我认为垃圾收集是任何阻止手动释放动态分配内存的过程.我想我不明白Rust指南认为垃圾收集是什么.

garbage-collection pointers rust

5
推荐指数
3
解决办法
3840
查看次数

根据参数选择一个子类

我有一个模块(db.py),它从不同的数据库类型(sqlite,mysql等)加载数据.该模块包含一个类db_loader和继承自它的子类(sqlite_loader,mysql_loader).

正在使用的数据库类型位于单独的params文件中,

用户如何获得正确的对象?

即我该怎么做:

loader = db.loader()

我是否在db.py模块中使用一个名为loader的方法,或者是否有一种更优雅的方法,即类可以根据参数选择自己的子类?有没有标准的方法来做这种事情?

python oop

4
推荐指数
2
解决办法
4675
查看次数

Python父类访问子私有变量

以下代码生成错误:

class A(object):
    def say_something(self):
        print(self.foo)
        print(self.__bar)

class B(A):
    def __init__(self):
        self.foo = 'hello'
        self.__bar = 'world'

test = B()
test.say_something()
Run Code Online (Sandbox Code Playgroud)

打印'hello'成功,但'world'会产生以下错误:

    print(self.__bar)
Run Code Online (Sandbox Code Playgroud)

我对此感到惊讶,我希望我的父类有一个方法可以访问其子级保证拥有的私有属性.有没有一些解决这个问题的标准方法?

附加问题:因此,如果我对一个属性使用单个下划线,那么从另一个对象使用它是不对的?是一个下划线说"我会使用这个,但用户不应该"或甚至开发人员将其视为私有.这段代码是不好的风格:

class A(object):
    def say_something(self):
        print(self.foo)
        print(self.__bar)

class B(A):
    def __init__(self):
        self.foo = 'hello'
        self.__bar = 'world'

test = B()
test.say_something()
Run Code Online (Sandbox Code Playgroud)

python oop inheritance class

4
推荐指数
1
解决办法
4896
查看次数

二进制列表为1和0到int的列表

我想将一个表示二进制数的整数1和0的列表转换为int.

类似的东西:

>>> [1,1,0,1].toint()
Run Code Online (Sandbox Code Playgroud)

会给出一个输出 13

python

4
推荐指数
1
解决办法
281
查看次数

加载另一个后,emacs disable-theme(主题冲突)

在Emacs 24.3.1上,如果我M-X load-theme又加载了另一个主题,则它通常会干扰我当前的主题,而不是替换它,从而在颜色方面产生非常难看的结果。

这里有一个示例,其中主题solarized-lightwombat主题冲突:

日光与温巴德冲突

我通过做一个M-X disable-theme古老的主题来解决这个问题,有没有更清洁的方法来解决这个问题?

emacs

3
推荐指数
1
解决办法
750
查看次数

递归函数(factorial)使用IntOverflow而不是Python来破坏Clojure

我在Clojure和Python中以相同的方式定义了一个递归函数:

;;;Clojure:
(defn factorial [n]
  (if (< n 1)
    1
    (* n (factorial (- n 1)))))

#Python:
def factorial(n):
    if n<1:
        return 1
    else:
    return n*factorial(n-1)
Run Code Online (Sandbox Code Playgroud)

在Python中,如果我运行factorial(200),我得到:

788657867364790503552363213932185062295135977687173263294742533244359449963403342920304284011984623904177212138919638830257642790242637105061926624952829931113462857270763317237396988943922445621451664240254033291864131227428294853277524242407573903240321257405579568660226031904170324062351700858796178922222789623703897374720000000000000000000000000000000000000000000000000L
Run Code Online (Sandbox Code Playgroud)

在Clojure中我得到:

ArithmeticException integer overflow  clojure.lang.Numbers.throwIntOverflow (Numbers.java:1388)
Run Code Online (Sandbox Code Playgroud)

当Python很乐意处理这个函数时,JVM上的Clojure导致这样的整数溢出是什么?我已经阅读了这个问题,似乎与Python相关的事实是,Python可以产生仅受可用内存限制的长整数,而我猜Clojure不能 - 但我会更加详细了解究竟发生了什么.

python clojure

2
推荐指数
1
解决办法
177
查看次数

带有默认参数的Python映射

假设我有一些采用默认参数的函数:

def fn(foo=0,bar=1):
    return something
Run Code Online (Sandbox Code Playgroud)

如何创建映射并以伪代码指定哪些默认参数:

map(fn,foo=[1,2,3])
Run Code Online (Sandbox Code Playgroud)

要么:

map(fn,bar=[5,6,7])
Run Code Online (Sandbox Code Playgroud)

python

2
推荐指数
2
解决办法
511
查看次数

dict.keys()返回dict_keys类 - 期望的视图对象

我在Python 2.7.3和Python 3.2.3中运行以下代码:

test_dict = {'foo':'bar'}
type(test_dict.keys())
Run Code Online (Sandbox Code Playgroud)

在Python 2中,输出是:

<type 'list'>
Run Code Online (Sandbox Code Playgroud)

在Python 3中:

<class 'dict_keys'>
Run Code Online (Sandbox Code Playgroud)

但是,Python 3文档声明该keys方法应该返回一个视图对象,那么为什么要返回一个类呢?

dictionary python-3.x

2
推荐指数
1
解决办法
1744
查看次数