我是Python的新手,需要一些建议来实现下面的场景.
我在两个不同的注册商处有两个用于管理域名的课程.两者都具有相同的界面,例如
class RegistrarA(Object):
def __init__(self, domain):
self.domain = domain
def lookup(self):
...
def register(self, info):
...
Run Code Online (Sandbox Code Playgroud)
和
class RegistrarB(object):
def __init__(self, domain):
self.domain = domain
def lookup(self):
...
def register(self, info):
...
Run Code Online (Sandbox Code Playgroud)
我想创建一个Domain类,给定一个域名,根据扩展名加载正确的注册器类,例如
com = Domain('test.com') #load RegistrarA
com.lookup()
biz = Domain('test.biz') #load RegistrarB
biz.lookup()
Run Code Online (Sandbox Code Playgroud)
我知道这可以使用工厂函数来完成(见下文),但这是最好的方法吗?还是有更好的方法使用OOP功能?
def factory(domain):
if ...:
return RegistrarA(domain)
else:
return RegistrarB(domain)
Run Code Online (Sandbox Code Playgroud) 我有这样的导入和代码:
import pandas as pd
import numpy as np
import statsmodels.formula.api as sm
import matplotlib.pyplot as plt
#Read the data from pydatasets repo using Pandas
url = './file.csv'
white_side = pd.read_csv(url)
#Fitting the model
model = sm.ols(formula='budget ~ article_size',
data=white_side,
subset=white_side['producer'] == "Peter Jackson")
fitted = model.fit()
print fitted.summary()
Run Code Online (Sandbox Code Playgroud)
执行此代码后,我有这样的错误:
/usr/bin/python2.7 /home/seth/PycharmProjects/osiris_project/PMN_way/start.py
Traceback (most recent call last):
File "/home/seth/PycharmProjects/osiris_project/PMN_way/start.py", line 5, in <module>
import matplotlib.pyplot as plt
File "/usr/lib64/python2.7/site-packages/matplotlib/pyplot.py", line 98, in <module>
_backend_mod, new_figure_manager, draw_if_interactive, _show = pylab_setup()
File …Run Code Online (Sandbox Code Playgroud) 如果我在函数末尾有这样的代码:
try:
return map(float, result)
except ValueError, e:
print "error", e
Run Code Online (Sandbox Code Playgroud)
在方法的返回部分中使用try /正确吗?有解决这个问题的更明智的方法吗?
我有这样的功能:
def sort(lst, beg, end):
mid = (beg + end)/2
sort(lst, beg, mid)
sort(lst, mid, end)
i = 0
j = 0
for l in range(beg, end):
if j > end - mid or (i <= mid - beg and lst[beg + i] < lst[mid + j]):
lst[l] = lst[beg + i]
i = i + 1
else:
lst[l] = lst[mid + j]
j = j + 1
Run Code Online (Sandbox Code Playgroud)
输入是:sort([1,5,6,6,3,1,5,4,3,3,4,5,6,7,8,5,3,2,4,5],1,10 )
作为输出:
RuntimeError: maximum recursion depth exceeded
Run Code Online (Sandbox Code Playgroud)
我怎样才能解决这个问题?