在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如何以及何时能够使用这些信息 - 它是通过 …
如果我在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中,这不会发生.是什么导致了这个问题?
Rust编程语言,第一版说Rust没有垃圾收集器:
它没有垃圾收集器就维持了这些目标
但是,在讨论选择保证时,它还说:
Rc<T>是引用计数指针.换句话说,这让我们有多个"拥有"指向同一数据的指针,当所有指针都超出范围时,数据将被删除(析构函数将被运行).
据我所知,这正是指针在Python等垃圾收集语言中的工作原理.
我认为垃圾收集是任何阻止手动释放动态分配内存的过程.我想我不明白Rust指南认为垃圾收集是什么.
我有一个模块(db.py),它从不同的数据库类型(sqlite,mysql等)加载数据.该模块包含一个类db_loader和继承自它的子类(sqlite_loader,mysql_loader).
正在使用的数据库类型位于单独的params文件中,
用户如何获得正确的对象?
即我该怎么做:
loader = db.loader()
我是否在db.py模块中使用一个名为loader的方法,或者是否有一种更优雅的方法,即类可以根据参数选择自己的子类?有没有标准的方法来做这种事情?
以下代码生成错误:
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) 我想将一个表示二进制数的整数1和0的列表转换为int.
类似的东西:
>>> [1,1,0,1].toint()
Run Code Online (Sandbox Code Playgroud)
会给出一个输出 13
在Emacs 24.3.1上,如果我M-X load-theme又加载了另一个主题,则它通常会干扰我当前的主题,而不是替换它,从而在颜色方面产生非常难看的结果。
这里有一个示例,其中主题solarized-light与wombat主题冲突:

我通过做一个M-X disable-theme古老的主题来解决这个问题,有没有更清洁的方法来解决这个问题?
我在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不能 - 但我会更加详细了解究竟发生了什么.
假设我有一些采用默认参数的函数:
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.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方法应该返回一个视图对象,那么为什么要返回一个类呢?
python ×6
emacs ×2
oop ×2
class ×1
clojure ×1
dictionary ×1
elisp ×1
inheritance ×1
pointers ×1
python-3.x ×1
rust ×1
sqlalchemy ×1