python: 函数相同 为何结果 就不同了,,,,,想不通

def printinfo(arg, *args):
print arg
for value in args:
print value
return
printinfo( 5,"cc","WWW",8)
print "-----------------------------------------"
def multiple(arg, *args):
print arg
for value in args:
print value
return
multiple(5,"cc","WWW",8)

运行结果:
C:\Python27\python.exe E:/untitled/p01/cc.py
5

cc

5
cc
WWW
8

Process finished with exit code 0

5个回答

应该跟输出方法 有关 两个输出方法不一样吧

没别的 就是return位置。Python根据缩进来控制的,第一个print arg之后print一个参数就return了,第二个print arg之后 循环print完参数才return。
so ~you know

我复制你的代码跑,结果一样啊!

一模一样,我只是用的是Python 3.6 ,差别不大,
只显示一个是因为你循环了一遍就return了.

运行结果参考图片.

图片说明

dcxy0
Q544471255 回复Ziv2U: 你两个return的位置都不一样,肯定运行结果不同了,printinfo的for执行一遍就返回了,而multiple的for执行完了才返回,所以结果肯定是不一样的
大约 2 年之前 回复
qq_38200425
Ziv2U 这个multiple函数运行结果是 : 5 cc WWW 8 printinfo 的运行结果是 5 cc (看一下我下面的截图)
大约 2 年之前 回复

图片说明

crazyskady
crazyskady 回复清风不识字12138: 正解!
大约 2 年之前 回复
qq_33363973
清风不识字12138 你两个函数return的位置不一样,所以结果不一样,printinfo()函数在第一次进入for循环后就直接return了, multiple()函数则是等for循环结束后再return的
大约 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Python全局环境下sklearn包中缺失Imputer函数
系统win10 64位,python版本3.7.4。 全局环境下,在我输入下载sklearn包的代码后,显示结果如下,包已经安装: ``` pip install sklearn Requirement already satisfied: sklearn in e:\python\lib\site-packages (0.0) Requirement already satisfied: scikit-learn in e:\python\lib\site-packages (from sklearn) (0.22) Requirement already satisfied: numpy>=1.11.0 in e:\python\lib\site-packages (from scikit-learn->sklearn) (1.17.4) Requirement already satisfied: scipy>=0.17.0 in e:\python\lib\site-packages (from scikit-learn->sklearn) (1.3.3) Requirement already satisfied: joblib>=0.11 in e:\python\lib\site-packages (from scikit-learn->sklearn) (0.14.1) ``` 然而在使用sklearn中的Imputer函数时,会出现报错: ``` >>> import numpy as np >>> import sklearn >>> from sklearn import preprocessing >>> from sklearn.preprocessing import Imputer Traceback (most recent call last): File "<stdin>", line 1, in <module> ImportError: cannot import name 'Imputer' from 'sklearn.preprocessing' (E:\python\lib\site-packages\sklearn\preprocessing\__init__.py) ``` 利用dir()查看包内的函数,发现没有Imputer: ``` >>> dir(sklearn.preprocessing) ['Binarizer', 'FunctionTransformer', 'KBinsDiscretizer', 'KernelCenterer', 'LabelBinarizer', 'LabelEncoder', 'MaxAbsScaler', 'MinMaxScaler', 'MultiLabelBinarizer', 'Normalizer', 'OneHotEncoder', 'OrdinalEncoder', 'PolynomialFeatures', 'PowerTransformer', 'QuantileTransformer', 'RobustScaler', 'StandardScaler', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__', '_csr_polynomial_expansion', '_data', '_discretization', '_encoders', '_function_transformer', '_label', 'add_dummy_feature', 'binarize', 'label_binarize', 'maxabs_scale', 'minmax_scale', 'normalize', 'power_transform', 'quantile_transform', 'robust_scale', 'scale'] ``` 但是在conda的base环境下,陆续安装numpy、scipy、matplotlib后,安装 scikit-learn包,就可以使用这个函数了。 我寻找了很久的解决方案,网上说的路径和Imputer相同的情况没有发生,请问大佬们这究竟是怎么回事儿啊
python 迭代和展开为什么有不同?
同样的一个函数,其他部分完全相同,为什么出现完全不同的结果? ![图片说明](https://img-ask.csdn.net/upload/201804/11/1523413321_746692.png) ![图片说明](https://img-ask.csdn.net/upload/201804/11/1523413344_441791.png) 第一张图结果是successfully 第二张图报错,为什么? 输出结果的意义可以忽略,问题就出在cons函数部分
tensorflow中相同函数问题
在tensorflow示例程序中看到这样一个代码 >>import tensorflow as tf >>from tensorflow.python.framework import ops >>ops.reset\_default_graph() 不知道这个函数是否和下面一个函数一样 >>tf.reset\_default_graph() 如果不一样,两个有什么不同?用哪一个更好? 如果这两个函数都是相同的,他们是重新写了一遍?还是都用tensorflow中同一个函数?
为什么下面两段python代码运行速度大不相同?
//python3.5 ``` def fact(n): if(n<=1): return 1; else: s=1; for i in range(1,n+1,1): s*=i; return s; def fact_length(n): print(n,"!(length)=",len(str(fact(n))),'\n'); ``` 没有写递归,python中递归层数有限制,不便于后面测试! 切回正题:各位大神我用上面两段代码测试时发现,当测试数据为10000以上时,第二个函数的执行速度明显快于第一段,表示不解。第二段函数的中间还套着第一段函数,运行速度为啥比第一段还快? 猜测:是不是慢在输出上?当数据量大了输出很费时???我的猜测对吗? 求大神告知,先谢过了!
【python3.8字典问题请教】对Excel中数据提取,相同项对应值相加,写入新sheet表
![图片说明](https://img-ask.csdn.net/upload/201912/17/1576559364_374608.png) 我想提取Sheet表中的N、O和R列,对R列中相同姓名的人对应的N、O列的值分别相加,形成图2这样 ![图片说明](https://img-ask.csdn.net/upload/201912/17/1576559417_243731.png) ``` print('Opening workbook...') wb = openpyxl.load_workbook('C:/Users/mawenxin/Desktop/dome1/asd.xlsx') #打开Excel表格 sheet = wb.get_sheet_by_name('Sheet1') #获取工作表 nameData = { } #创建字典 print('Reading rows...') for row in range(2,sheet.max_row+1): #从第二行循环到最后一行 JE = sheet['N'+str(row)].value name = sheet['E'+ str(row)].value SY = sheet['O'+str(row)].value #存储每一列的数据 #字典结构nameData['姓名'][金额][使用金额] nameData={name,(JE,SY)} ``` 我按照网上以及书上的内容只能写这点,也不知道对不对 【问题】 **字典内能不能一个键对应两个值,或者对应一个元组或列表?** **用什么函数进行提取合并姓名?** **如果自定义函数要怎么写?** **能不能帮我写一下,琢磨很久了也不知道咋写**
python的libsvm同样参数连续运行两条指令结果不同
train_label = trainlabel[:] train_data = traindata[:] cmd = '-v 3 -c 0.5 -g 0.5 -h 0' cmd1 = '-v 3 -c 0.5 -g 0.5 -h 0' model = svm_train(trainlabel,traindata,cmd) model1 = svm_train(train_label, train_data, cmd1) ![图片说明](https://img-ask.csdn.net/upload/201904/22/1555931964_29597.png) 当我在程序中连续使用svm_train函数时,相同的输入参数会得到不同的结果,然后我又复制了一份trainlabel,traindata,cmd分别输入,得到的结果依然不同,请问这是怎么回事呢
python如何批量生产函数?
代码: def main_function(a): if a%3==0: print a def t1(): for a in range(0,100): main_function(a) def t2(): for a in range(100,200): main_function(a) def t3(): def t4(): ....... pool=ThreadPool(20) pool.spawn(t1) pool.spawn(t2) ...... 就是类似于这样的,怎样批量生产t1,t2,t3,t4...等。或者说怎样简便的把t函数加入线程池。。 或者像gevent.joinall([func_list])这种形式也行 另外对于multiprocessing,也是面临相同的情况。。怎样简便的多开进程
用python试MFCC, 不同的方法结果不同,请哪位大侠帮忙看看
刚开始学习MFCC,从网上找了两种方法,求MFCC,试用了下,发现结果完全不同,请高手帮忙解释,或能给出正确结果: 代码如下 : import numpy as np from scipy import signal from scipy.fftpack import dct import pylab as plt import librosa def enframe(wave_data, nw, inc, winfunc): '''将音频信号分帧。 参数含义: wave_data:原始音频型号 nw:每一帧的长度(这里指采样点的长度,即采样频率乘以时间间隔) inc:相邻帧的间隔 ''' wlen=len(wave_data) #信号总长度 if wlen<=nw: nf=1 else: nf=int(np.ceil((1.0*wlen-nw+inc)/inc)) pad_length=int((nf-1)*inc+nw) #所有帧加起来总的铺平后的长度 print(wlen,nf, pad_length) zeros=np.zeros((pad_length-wlen,)) #不够的长度使用0填补 pad_signal=np.concatenate((wave_data,zeros)) #填补后的信号 indices=np.tile(np.arange(0,nw),(nf,1))+np.tile(np.arange(0,nf*inc,inc),(nw,1)).T #相当于对所有帧的时间点进行抽取,得到nf*nw长度的矩阵 indices=np.array(indices,dtype=np.int32 #indices 为pad_signal的位置 frames=pad_signal[indices] #得到帧信号 win=np.tile(winfunc,(nf,1)) #window窗函数,这里默认取1 return frames*win #返回帧信号矩阵 Df=5 #采样点时间间隔 fs=8000 #采样频率 N=fs/Df #采样点数 t = np.arange(0,(N-1)/fs,1/fs) #取样时间 wave_data=np.sin(2*np.pi*200*t) # 待处理的信号 #预加重 b,a = signal.butter(1,1-0.97,'high') emphasized_signal = signal.filtfilt(b,a,wave_data) #归一化 lifts=[] for n in range(1,13): lift =1 + 6 * np.sin(np.pi * n / 12) lifts.append(lift) #分帧、加窗 winfunc = signal.hamming(256) #汉明窗 #分帧函数:每帧长度256 ,不重叠长度80: X=enframe(wave_data, 256, 80, winfunc) frameNum =X.shape[0] #获取分帧后的帧数 下面是三组代码及结果 (1)第一种情况: for i in range(frameNum): y=X[i,:] yf = np.abs(np.fft.rfft(y)) melM = librosa.feature.mfcc(y,fs,S=yf,n_mfcc=12) print(melM) 输出结果: [12.01187176 16.44704344 15.61216672 14.38118246 12.77777051 10.84203157 8.62860918 6.19697322 3.61622903 0.95595607 -1.70837193 -4.30547829] (2)第二种情况: for i in range(frameNum): y=X[i,:] yf = np.abs(np.fft.rfft(y)) yf=yf**2 melM = librosa.feature.mfcc(y,fs,S=yf,n_mfcc=12) print(melM) 输出结果: [ 570.37065963 795.19627788 761.25293536 705.78283689 630.39580985 537.27662246 429.12048164 309.05311082 180.53860667 47.27705996 -86.90415637 -218.16302183] 这两种情况,MFCC对应的图的形状是相同 (3)第三种情况: for i in range(frameNum): y=X[i,:] melM = librosa.feature.mfcc(y,fs,S=None,n_mfcc=12) print(melM) 结果: [[-278.17089678] [ 144.78769227] [ 56.44110736] [ 40.11968822] [ 25.1757355 ] [ 14.67492614] [ 5.77245624] [ -0.96605092] [ -7.23574856] [ -12.32471135] [ -17.40294169] [ -20.9566881 ]] (4)第四种情况: for i in range(frameNum): y=X[i,:] yf = np.abs(np.fft.rfft(y)) #频谱取模 yf = yf**2 #谱线能量 nfilt = 24 #Mel滤波器数量 low_freq_mel = 0 NFFT=256 high_freq_mel = (2595 * np.log10(1 + (fs / 2) / 700)) # 把 Hz 变成 Mel mel_points = np.linspace(low_freq_mel, high_freq_mel, nfilt + 2) # 将梅尔刻度等间隔 hz_points = (700 * (10**(mel_points / 2595) - 1)) # 把 Mel 变成 Hz bin = np.floor((NFFT + 1) * hz_points / fs) fbank = np.zeros((nfilt, int(np.floor(NFFT / 2 + 1)))) for m in range(1, nfilt + 1): f_m_minus = int(bin[m - 1]) # left f_m = int(bin[m]) # center f_m_plus = int(bin[m + 1]) # right for k in range(f_m_minus, f_m): fbank[m - 1, k] = (k - bin[m - 1]) / (bin[m] - bin[m - 1]) for k in range(f_m, f_m_plus): fbank[m - 1, k] = (bin[m + 1] - k) / (bin[m + 1] - bin[m]) filter_banks = np.dot(yf[0:129], fbank.T) filter_banks = np.where(filter_banks == 0, np.finfo(float).eps, filter_banks) # 数值稳定性 filter_banks = 10 * np.log10(filter_banks) # dB 此为分贝标准公式 filter_banks -= (np.mean(filter_banks, axis=0) + 1e-8) #DCT系数 num_ceps = 12 c2 = dct(filter_banks, type=2, axis=-1, norm='ortho')[ 1 : (num_ceps + 1)] # Keep 2-13 c2 *= lifts print(c2) 结果是: [ 152.16939829 103.18780826 53.15848861 -3.0957145 -67.3315891 -123.00839875 -157.48879067 -150.09115643 -104.25335171 -47.27345817 -6.68998885 1.39787529]
关于python的namespace探讨
<p>     最近刚刚开始看python基础, 由于原来是使用java编程, 没有听到过 虚函数的概念,  虚函数的作用是实现动态联编,  类似于java的方法可以被子类重写的概念,是多态的一种表现。</p> <p>    <span style="color: #ff0000;"><strong>而今天看python的命名空间的时候,就懵了,即便是虚函数,可也作为一个对象存在啊,在命名的字典中无法找到,着实无法理解,烦请高手们赐教!</strong></span></p> <p><strong></strong></p> <p><span style="color: #ff0000;"><span style="color: #000000;">以下是我的测试代码, 其中#1,说明   1代表执行步骤, 后面是说明。</span><strong> 主要问题的发生在11步骤上:</strong></span></p> <p><strong></strong></p> <pre name="code" class="python"># -*- coding: gbk -*- """ 这是一个测试 namespcace的范例 """ print "第1次---testns全局_globals函数:" + str(globals()) #1, 字典里仅有基本的属性,貌似类似java的类装载一样先走了一遍通用属性(Object根类的加载?) print "第1次----testns全局_locals函数:" + str(locals()) #2, locals == golbals 的namespace def testns1(): print "testns1)_function_全局namespce:" + str(globals()) class Person: print "Pserson_globals()函数:" + str(globals()) #3-1, 字典里已包含testns1按照顺序生成的,还未包含Person print "Person_locals()函数:" + str(locals()) #3-2, 字典为:{'__module__': '__main__'},没有对应的方法 def __init__(a): print "Pserson对象_globals函数:" + str(globals()) print __name__ def sayhello(a): print "sayhello_globals()函数:" + str(globals()) #8, 与module的globals 相同 print "sayhello_locals()函数:" + str(locals()) #9, 本地只有p def checkSayHello(): print "checkSayHello_globals()函数:" + str(globals()) #10, 到这里已经证明全局globals都是同一个,即module的globals,后面无需再说明globals print "checkSayHello_locals()函数:" + str(locals()) #11, sayhello function 到底在哪里呢?,locals里没有(3-2步骤),globals里也没有 checkSayHello() def saidhello(a,b): print "saidhello里打着:"+ str(Person.sayhello) print "saidhello_locals函数:" + str(locals()) print "第2次---testns全局_globals函数:" + str(globals()) #4,字典里已包含testns1,Person,saidhello print "第2次----testns全局_locals函数:" + str(locals()) #5, 到这里已经证明module的locals和globals是相同的 testns1() #6, 与module的globals 相同 p = Person() #7, 与module的globals 相同 包含上了p p.sayhello() Person.sayhello = saidhello print "aaaaaaaaaaaaaaa:" + str(Person.sayhello) #12, &lt;unbound method Person.saidhello&gt; 说指定到了一个未绑定的function print "bbbbbbbbbbbbbbb:" + str(p.sayhello) #13, 绑定到p对象上的sayhello Person.sayhello(p,2) p.sayhello(1) print "testns全局_globals函数:" + str(globals()) print "testns全局_locals函数:" + str(locals()) </pre> <p> </p> <p><strong></strong></p> <p> </p>
如何用python 在一个.csv和已知的列表中的数据进行匹配 并输出.csv文件中匹配成功的一项中的相关信息
![主函数中的代码](https://img-ask.csdn.net/upload/201911/16/1573908239_643051.png) ![调用的函数的代码](https://img-ask.csdn.net/upload/201911/16/1573908277_51599.png) ![.cvs文件的格式](https://img-ask.csdn.net/upload/201911/16/1573908299_601444.png) 请问我的如果我的abc里存放了一些id,我想要把abc里的id逐一的与.csv文件的movieId进行匹配,找到相同的id后输出这个movieId对应的title
plt.hist,np.histogram,c2.calchist画图像灰度直方图结果不同
用以上三个函数对一副灰度图像画灰度直方图所返回的数组不完全相同,后两者 一样,和前者不同,将bin设成10时不同我我知道是因为分组进一还是四舍五入方法不同, 但即使是将bin设到256也不同,就不知道为啥了。。。 ```img = cv2.imread(r'E:\python trial\python now\test\source\s1\1.pgm',0) hist_1 = cv2.calcHist([img], [0], None, [256], [0, 256]) hist_2, bins, patches = plt.hist(arr, bins=256) hist_3,b = np.histogram(img, bins=256, range=(0, 256)) ```
python用dict计算时间差
如果使用字典描述一个时间,例如t={“hour”:12,“minute”:23,“second”:34} 时间为“12:23:34”,设计一个函数inerval(t1,t2),计算t1,t2的时间差 返回相同的结构的一个字典时间
SVRG为什么实现效果没有SGD好
> 我在用python实现SVRG算法的时候同时和SGD进行比较,在网络结构与激活函数相同的情况下SGD可以收敛,为什么SVRG不能收敛,我确定是按照论文上的算法进行编写,并且与多人的程序(虽然那些程序从来没有运行成功过)进行比较,但是仍然没有用我都不知道怎么解决了 ``` import numpy as np for i in range(max_iterations): batch_mask = np.random.choice(train_size, batch_size) x_batch = x_train[batch_mask] t_batch = t_train[batch_mask] """随机梯度下降法(Stochastic Gradient Descent)""" grads = networks['SGD'].gradient(x_batch, t_batch) optimizers['SGD'].update(networks['SGD'].params, grads) loss = networks['SGD'].loss(x_batch, t_batch) #获得训练误差 train_loss['SGD'].append(loss) #存储训练误差 maxiter = batch_size*2 """SVRG""" fullgrad = networks['SVRG'].gradient(x_batch, t_batch) w = copy.deepcopy(networks['SVRG'].params) wtemp = copy.deepcopy(w) for j in range(100): index = np.random.choice(batch_size, 1) x_index = x_batch[index] t_index = t_batch[index] networks['SVRG'].params = copy.deepcopy(wtemp) g1 = networks['SVRG'].gradient(x_index, t_index) networks['SVRG'].params = copy.deepcopy(w) g2 = networks['SVRG'].gradient(x_index, t_index) optimizers['SVRG'].update(networks['SVRG'].params, g1, g2, fullgrad) # 对参数进行更新 #params[key] = params[key] - self.lr * (g1[key] - (g2[key] - fullgrad[key])) wtemp = copy.deepcopy(networks['SVRG'].params) w = copy.deepcopy(networks['SVRG'].params) loss = networks['SVRG'].loss(x_batch, t_batch) # 获得SVRG训练误差 train_loss['SVRG'].append(loss) # 存储SVRG训练误差 ``` 能有人帮我彻底解决吗,急需
数据格式转换,字符串如何转换成JSON格式
请大神帮忙,如何用python函数转换数据格式 ``` 景观,土建 ,水电 ,,,照明 ,植物 ``` 第一行的意思是景观设计的其中一部分:土建; 第二行逗号之前内容与第一行相同,省略不写,意思是 景观——水电; 第三行第一、二个逗号之前的内容与第二行相同,省略不写,意思是 景观——水电——照明; 第四行第一个逗号之前的内容与第三行相同,省略不写,意思是 景观——植物; 最终用python函数转换成转换成下面的JSON格式,函数同时需要具备拓展的能力,在上面字符串不断扩充的情况下也能够适用。 ``` { "景观":[{ "土建":[] },{ "水电":[{ "照明":[] }] },{ "植物":[] }] } ``` 请大神帮忙思路。本人想了好久都没做出来。
用torchtext建立text-cnn的数据集时,一直报相同的错误,请问如何解决?
这是代码 ```python from torchtext import data TEXT = data.Field(sequential=True, fix_length=1000) LABEL = data.Field(sequential=False, use_vocab=False) train, test = data.TabularDataset.splits( path='./', train='train3.csv', test='train3.csv', format='csv', delimiter=',', fields=[('text', TEXT), ('label', LABEL)]) ``` 这是csv文件 ``` text,label a,1 b,0 c,1 ``` 这是报错 ![图片说明](https://img-ask.csdn.net/upload/201912/03/1575377606_936755.jpg) 谢谢!! <br></br> ---------------------------分割线------------------------------- 已自行解决! 把python\lib\site-packages\torchtext\utils.py文件中的unicode_csv_reader函数以下代码段 ```python maxInt = sys.maxsize while True: # decrease the maxInt value by factor 10 # as long as the OverflowError occurs. try: csv.field_size_limit(maxInt) break except OverflowError: maxInt = int(maxInt / 10) csv.field_size_limit(sys.maxsize) ``` 最后一行csv.field_size_limit(sys.maxsize)删去即可
在该限制下,如何使用最短代码的java实现该词频统计
#!/usr/bin/env python import re, sys, collections stops = open(’../stop_words.txt’).read().split(’,’) words = re.findall(’[a-z]{2,}’, open(sys.argv[1]).read().lower()) counts = collections.Counter(w for w in words if w not in stops) for (w, c) in counts.most_common(25): print w, ’-’, c 上述示例代码为python版本的词频统计。功能如下: 导入stopwords和源文件,之后进行统计并输出。 问题:使用尽可能少的java代码来实现相同的功能,尽可能的调用函数
python小白 求助 读取文件夹下txt文件,并进行数据处理
一个文件夹下有若干个txt文件,格式基本都相同。 逐个打开 从第32行开始读 内容格式如下: 0.011129 2 3CD Rx d 8 00 00 FF FF 0B 22 60 FE 0.011476 5 1E7 Rx d 8 02 19 FF 65 FF 80 01 00 0.011507 7 1E7 Rx d 8 02 19 FF 65 FF 80 01 00 0.011593 2 40D Rx d 8 23 48 30 3C 3B 08 55 48 0.011598 4 32D Rx d 8 7F 24 09 00 7F 40 00 86 0.012584 2 44D Rx d 8 21 86 21 6C 21 6E 41 3B 0.012588 4 40D Rx d 8 23 48 30 3C 3B 08 55 48 (我想应该先用正则函数分割) 分析的话 我举个例子 如果第3列 值是3CD 取最后一次出现这个字符的行(因此这个值可能会出现好多次),并将后面的00 00 FF FF 0B 22 60 FE 由16进制转化为10进制 然后输出一个excle表格 格式是 文件名 3CD 1E7 (txt文件名) (十进制的值 ) (十进制的值) ![图片说明](https://img-ask.csdn.net/upload/201906/19/1560928859_197613.png)
flask+mysql实现的web应用,在注册页面点击注册后提示 Instance '<User at 0x5486a10>' has been deleted?
##问题描述 从github(https://github.com/num10/transfile)上下载的一个用flask+mysql实现的转pdf成word的web应用,其中 涉及到新用户的注册: ![图片说明](https://img-ask.csdn.net/upload/201911/07/1573098094_252858.png) 可是在注册页面填完信息点击注册后前端报错如下: ![图片说明](https://img-ask.csdn.net/upload/201911/07/1573098203_905955.png) ``` sqlalchemy.orm.exc.ObjectDeletedError: Instance '<User at 0x58072f0>' has been deleted, or its row is otherwise not present. ``` 根据traceback的信息,定位到出错的位置应该是下图中的models.py和views.py文件 ![图片说明](https://img-ask.csdn.net/upload/201911/07/1573100399_404211.jpg) 后台关于这两个文件的报错信息为: ```ruby File "C:\Users\26808\transfile-master\app\auth\views.py", line 68, in register token = user.generate_confirmation_token() File "C:\Users\26808\transfile-master\app\models.py", line 142, in generate_confirmation_token return s.dumps({'confirm': self.id}).decode('utf-8') ``` 对应文件中: views.py: ```ruby @auth.route('/register', methods=['GET', 'POST']) def register(): form = RegistrationForm() if form.validate_on_submit(): user = User(email=form.email.data, username=form.username.data, password=form.password.data) db.session.add(user) db.session.commit() token = user.generate_confirmation_token() send_email(user.email, '认证您的账户', 'auth/email/confirm', user=user, token=token) flash('认证信息已发送至您的邮箱') return redirect(url_for('auth.login')) return render_template('auth/register.html', form=form) ``` models.py: ``` def generate_confirmation_token(self, expiration=3600): s = Serializer(current_app.config['SECRET_KEY'], expiration) return s.dumps({'confirm': self.id}).decode('utf-8') ``` ##补充 1.按照requirements文件的要求,flask都安装了正确的包 2.正如register函数中所写的那样,点击注册后用户信息会被加入mysql数据库中但是会被重复加入,即多次运行每次都出错,并且相同的用户被反复加入mysql数据库中 3.网上大多数都是通过app.run()来启动文件的,但是这个项目里面先要设置 ```set FLASK_APP = manage.py``` 在```flask run```才能运行 能解释一下为什么吗? manage.py代码如下: ```ruby #!/usr/bin/ python # -*- coding: UTF-8 -*- import os COV = None if os.environ.get('FLASK_COVERAGE'): import coverage COV = coverage.coverage(branch=True, include='app/*') COV.start() import sys import click from flask_migrate import Migrate,upgrade from app import create_app, db from app.models import User, Follow, Role, Permission, Post, Comment from flask_uploads import configure_uploads from app.auth.forms import pdfs,photos,words app = create_app(os.getenv('FLASK_CONFIG') or 'default') migrate = Migrate(app, db) configure_uploads(app, pdfs) configure_uploads(app, photos) configure_uploads(app, words) @app.shell_context_processor def make_shell_context(): return dict(db=db, User=User, Follow=Follow, Role=Role, Permission=Permission, Post=Post, Comment=Comment) @app.cli.command() @click.option('--coverage/--no-coverage', default=False, help='Run tests under code coverage.') def test(coverage=False): """Run the unit tests.""" if coverage and not os.environ.get('FLASK_COVERAGE'): import subprocess os.environ['FLASK_COVERAGE'] = '1' sys.exit(subprocess.call(sys.argv)) import unittest tests = unittest.TestLoader().discover('tests') unittest.TextTestRunner(verbosity=2).run(tests) if COV: COV.stop() COV.save() print('Coverage Summary:') COV.report() basedir = os.path.abspath(os.path.dirname(__file__)) covdir = os.path.join(basedir, 'tmp/coverage') COV.html_report(directory=covdir) print('HTML version: file://%s/index.html' % covdir) COV.erase() @app.cli.command() @click.option('--length', default=25, help='Number of functions to include in the profiler report.') @click.option('--profile-dir', default=None, help='Directory where profiler data files are saved.') def profile(length=25, profile_dir=None): """Start the application under the code profiler.""" from werkzeug.contrib.profiler import ProfilerMiddleware app.wsgi_app = ProfilerMiddleware(app.wsgi_app, restrictions=[length], profile_dir=profile_dir) app.run(debug=False) @app.cli.command() def deploy(): """Run deployment tasks.""" # migrate database to latest revision upgrade() # create or update user roles Role.insert_roles() # ensure all users are following themselves User.add_self_follows() if __name__ == '__main__': deploy() ``` 数据模型models.py: ``` #!/usr/bin/ python # -*- coding: UTF-8 -*- from datetime import datetime import hashlib from werkzeug.security import generate_password_hash, check_password_hash from itsdangerous import TimedJSONWebSignatureSerializer as Serializer from markdown import markdown import bleach from flask import current_app, request,url_for from flask_login import UserMixin, AnonymousUserMixin from . import db, login_manager class Permission: FOLLOW = 1 COMMENT = 2 WRITE = 4 MODERATE = 8 ADMIN = 16 class Role(db.Model): __tablename__ = 'roles' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(64), unique=True) default = db.Column(db.Boolean, default=False, index=True) permissions = db.Column(db.Integer) users = db.relationship('User', backref='role', lazy='dynamic') def __init__(self, **kwargs): super(Role, self).__init__(**kwargs) if self.permissions is None: self.permissions = 0 @staticmethod def insert_roles(): roles = { 'User': [Permission.FOLLOW, Permission.COMMENT, Permission.WRITE], 'Moderator': [Permission.FOLLOW, Permission.COMMENT, Permission.WRITE, Permission.MODERATE], 'Administrator': [Permission.FOLLOW, Permission.COMMENT, Permission.WRITE, Permission.MODERATE, Permission.ADMIN], } default_role = 'User' for r in roles: role = Role.query.filter_by(name=r).first() if role is None: role = Role(name=r) role.reset_permissions() for perm in roles[r]: role.add_permission(perm) role.default = (role.name == default_role) db.session.add(role) db.session.commit() def add_permission(self, perm): if not self.has_permission(perm): self.permissions += perm def remove_permission(self, perm): if self.has_permission(perm): self.permissions -= perm def reset_permissions(self): self.permissions = 0 def has_permission(self, perm): return self.permissions & perm == perm def __repr__(self): return '<Role %r>' % self.name class Follow(db.Model): __tablename__ = 'follows' follower_id = db.Column(db.Integer, db.ForeignKey('users.id'), primary_key=True) followed_id = db.Column(db.Integer, db.ForeignKey('users.id'), primary_key=True) timestamp = db.Column(db.DateTime, default=datetime.utcnow) class User(UserMixin, db.Model): __tablename__ = 'users' id = db.Column(db.Integer, primary_key=True) email = db.Column(db.String(64), unique=True, index=True) username = db.Column(db.String(64), unique=True, index=True) role_id = db.Column(db.Integer, db.ForeignKey('roles.id')) password_hash = db.Column(db.String(128)) confirmed = db.Column(db.Boolean, default=False) name = db.Column(db.String(64)) location = db.Column(db.String(64)) about_me = db.Column(db.Text()) member_since = db.Column(db.DateTime(), default=datetime.utcnow) last_seen = db.Column(db.DateTime(), default=datetime.utcnow) avatar_hash = db.Column(db.String(32)) posts = db.relationship('Post', backref='author', lazy='dynamic') followed = db.relationship('Follow', foreign_keys=[Follow.follower_id], backref=db.backref('follower', lazy='joined'), lazy='dynamic', cascade='all, delete-orphan') followers = db.relationship('Follow', foreign_keys=[Follow.followed_id], backref=db.backref('followed', lazy='joined'), lazy='dynamic', cascade='all, delete-orphan') comments = db.relationship('Comment', backref='author', lazy='dynamic') @staticmethod def add_self_follows(): for user in User.query.all(): if not user.is_following(user): user.follow(user) db.session.add(user) db.session.commit() def __init__(self, **kwargs): super(User, self).__init__(**kwargs) if self.role is None: if self.email == current_app.config['FLASKY_ADMIN']: self.role = Role.query.filter_by(name='Administrator').first() if self.role is None: self.role = Role.query.filter_by(default=True).first() if self.email is not None and self.avatar_hash is None: self.avatar_hash = self.gravatar_hash() self.follow(self) @property def password(self): raise AttributeError('password is not a readable attribute') @password.setter def password(self, password): self.password_hash = generate_password_hash(password) def verify_password(self, password): return check_password_hash(self.password_hash, password) def generate_confirmation_token(self, expiration=3600): s = Serializer(current_app.config['SECRET_KEY'], expiration) return s.dumps({'confirm': self.id}).decode('utf-8') def confirm(self, token): s = Serializer(current_app.config['SECRET_KEY']) try: data = s.loads(token.encode('utf-8')) except: return False if data.get('confirm') != self.id: return False self.confirmed = True db.session.add(self) return True def generate_reset_token(self, expiration=3600): s = Serializer(current_app.config['SECRET_KEY'], expiration) return s.dumps({'reset': self.id}).decode('utf-8') @staticmethod def reset_password(token, new_password): s = Serializer(current_app.config['SECRET_KEY']) try: data = s.loads(token.encode('utf-8')) except: return False user = User.query.get(data.get('reset')) if user is None: return False user.password = new_password db.session.add(user) return True def can(self, perm): return self.role is not None and self.role.has_permission(perm) def is_administrator(self): return self.can(Permission.ADMIN) def ping(self): self.last_seen = datetime.utcnow() db.session.add(self) def gravatar_hash(self): return hashlib.md5(self.email.lower().encode('utf-8')).hexdigest() def gravatar(self, size=100, default='identicon', rating='g'): url = 'https://secure.gravatar.com/avatar' hash = self.avatar_hash or self.gravatar_hash() return '{url}/{hash}?s={size}&d={default}&r={rating}'.format( url=url, hash=hash, size=size, default=default, rating=rating) def follow(self, user): if not self.is_following(user): f = Follow(follower=self, followed=user) db.session.add(f) def unfollow(self, user): f = self.followed.filter_by(followed_id=user.id).first() if f: db.session.delete(f) def is_following(self, user): if user.id is None: return False return self.followed.filter_by( followed_id=user.id).first() is not None def is_followed_by(self, user): if user.id is None: return False return self.followers.filter_by( follower_id=user.id).first() is not None @property def followed_posts(self): return Post.query.join(Follow, Follow.followed_id == Post.author_id)\ .filter(Follow.follower_id == self.id) def to_json(self): json_user = { 'url': url_for('api.get_user', id=self.id), 'username': self.username, 'member_since': self.member_since, 'last_seen': self.last_seen, 'posts_url': url_for('api.get_user_posts', id=self.id), 'followed_posts_url': url_for('api.get_user_followed_posts', id=self.id), 'post_count': self.posts.count() } return json_user def generate_auth_token(self, expiration): s = Serializer(current_app.config['SECRET_KEY'], expires_in=expiration) return s.dumps({'id': self.id}).decode('utf-8') @staticmethod def verify_auth_token(token): s = Serializer(current_app.config['SECRET_KEY']) try: data = s.loads(token) except: return None return User.query.get(data['id']) def __repr__(self): return '<User %r>' % self.username class AnonymousUser(AnonymousUserMixin): def can(self, permissions): return False def is_administrator(self): return False login_manager.anonymous_user = AnonymousUser @login_manager.user_loader def load_user(user_id): return User.query.get(int(user_id)) class Post(db.Model): __tablename__ = 'posts' id = db.Column(db.Integer, primary_key=True) body = db.Column(db.Text) body_html = db.Column(db.Text) timestamp = db.Column(db.DateTime, index=True, default=datetime.utcnow) author_id = db.Column(db.Integer, db.ForeignKey('users.id')) comments = db.relationship('Comment', backref='post', lazy='dynamic') @staticmethod def on_changed_body(target, value, oldvalue, initiator): allowed_tags = ['a', 'abbr', 'acronym', 'b', 'blockquote', 'code', 'em', 'i', 'li', 'ol', 'pre', 'strong', 'ul', 'h1', 'h2', 'h3', 'p'] target.body_html = bleach.linkify(bleach.clean( markdown(value, output_format='html'), tags=allowed_tags, strip=True)) def to_json(self): json_post = { 'url': url_for('api.get_post', id=self.id), 'body': self.body, 'body_html': self.body_html, 'timestamp': self.timestamp, 'author_url': url_for('api.get_user', id=self.author_id), 'comments_url': url_for('api.get_post_comments', id=self.id), 'comment_count': self.comments.count() } return json_post @staticmethod def from_json(json_post): body = json_post.get('body') if body is None or body == '': raise ValidationError('post does not have a body') return Post(body=body) db.event.listen(Post.body, 'set', Post.on_changed_body) class Comment(db.Model): __tablename__ = 'comments' id = db.Column(db.Integer, primary_key=True) body = db.Column(db.Text) body_html = db.Column(db.Text) timestamp = db.Column(db.DateTime, index=True, default=datetime.utcnow) disabled = db.Column(db.Boolean) author_id = db.Column(db.Integer, db.ForeignKey('users.id')) post_id = db.Column(db.Integer, db.ForeignKey('posts.id')) @staticmethod def on_changed_body(target, value, oldvalue, initiator): allowed_tags = ['a', 'abbr', 'acronym', 'b', 'code', 'em', 'i', 'strong'] target.body_html = bleach.linkify(bleach.clean( markdown(value, output_format='html'), tags=allowed_tags, strip=True)) db.event.listen(Comment.body, 'set', Comment.on_changed_body) ```
pyqt5+scrapy传值问题
用pyqt5给爬虫做个界面,但是在界面中的lineEdit文本传不到爬虫中去(要爬微博所以得传一个用于搜索的关键字) 方法是设一个全局变量KEYWORD然后再在界面中用lineEdit修改这个全局变量,最后开启爬虫,读取这个修改后的KEYWORD 无关的函数我都改成pass方便查看- -,为什么这方法有错误,是因为开了另一个线程然后爬虫默认赋值为原来的关键字1 ? # -*- coding: utf-8 -*- KEYWORD = '关键字1' class Ui_Form(object): def setupUi(self, Form): Form.setObjectName("Form") Form.resize(769, 575) self.lineEdit = QLineEdit(Form) self.lineEdit.setGeometry(QRect(130, 50, 161, 21)) self.lineEdit.setObjectName("lineEdit") self.label = QLabel(Form) self.label.setGeometry(QRect(30, 50, 91, 21)) self.label.setObjectName("label") self.pushButton_2 = QPushButton(Form) self.pushButton_2.setGeometry(QRect(550, 40, 81, 41)) self.pushButton_2.setObjectName("pushButton_2") self.pushButton_3 = QPushButton(Form) self.pushButton_3.setGeometry(QRect(330, 40, 81, 41)) self.pushButton_3.setObjectName("pushButton_3") self.pushButton_4 = QPushButton(Form) self.pushButton_4.setGeometry(QRect(440, 40, 81, 41)) self.pushButton_4.setObjectName("pushButton_4") self.pushButton_5 = QPushButton(Form) self.pushButton_5.setGeometry(QRect(660, 40, 81, 41)) self.pushButton_5.setObjectName("pushButton_5") self.pushButton_4.clicked.connect(self.pop2) #开启爬虫 self.pushButton_2.clicked.connect(self.pop1) self.pushButton_3.clicked.connect(self.pop4) #开启cookiespool和修改关键字值 self.pushButton_5.clicked.connect(self.pop5) self.tableView = QTableView(Form) self.tableView.setGeometry(QRect(15, 131, 731, 421)) #设置tableView self.model = QStandardItemModel(1, 6) self.model.setHorizontalHeaderLabels(['作者id', '评论数', '正文', '转发数', '点赞数', 'user']) self.tableView.setEditTriggers(QAbstractItemView.NoEditTriggers) # 只读 self.tableView.resizeColumnsToContents() # 宽度和长度和显示内容相同 self.tableView.setModel(self.model) #设置tableView结束 self.tableView.setObjectName("tableView") self.label_2 = QLabel(Form) self.label_2.setGeometry(QRect(30, 110, 72, 15)) self.label_2.setObjectName("label_2") self.retranslateUi(Form) QMetaObject.connectSlotsByName(Form) def retranslateUi(self, Form): _translate = QCoreApplication.translate Form.setWindowTitle(_translate("Form", "Form")) self.label.setText(_translate("Form", "输入关键字")) self.pushButton_2.setText(_translate("Form", "显示结果")) self.pushButton_3.setText(_translate("Form", "启动服务")) self.pushButton_4.setText(_translate("Form", "开始抓取")) self.pushButton_5.setText(_translate("Form", "结果分析")) self.label_2.setText(_translate("Form", "结果显示")) #槽函数部分 def pop1(self): #从数据库显示数据 pass def pop2(self): #开启爬虫 new.run() def pop3(self): #退出 pass def pop4(self): #开启服务 在这修改关键字 比如传入的时关键字2 global KEYWORD KEYWORD = self.lineEdit.text() print(KEYWORD) #输出会显示关键字2 而不是关键字1 s.start() def pop5(self): #结果显示 pass if __name__ == '__main__': app = QApplication(sys.argv) MainWindow = QMainWindow() ui = Ui_Form() ui.setupUi(MainWindow) MainWindow.show() sys.exit(app.exec_()) #爬虫部分 class WeiboSpider(Spider): client = pymongo.MongoClient(host='127.0.0.1', port=27017) db = client.weibo p = db.weibo name = 'weibo' allowed_domains = ["weibo.cn"] start_url='https://weibo.cn/search/mblog' max_page = 100 count = 0 def start_requests(self): global KEYWORD keyword = KEYWORD #这里获取不到已经修改的关键字 print(keyword) #输出的还是关键字1 url='{url}?keyword={keyword}'.format(url=self.start_url, keyword=keyword) for page in range(self.max_page + 1): data = { 'mp' : str(self.max_page), 'page' : str(page) } yield FormRequest(url, callback=self.parse_index, formdata=data) def parse_index(self, response): pass def comment_detail(self, response): pass new.py 文件内容 from scrapy.crawler import CrawlerProcess from weibosearch.spiders.weibo import WeiboSpider def run(): process = CrawlerProcess() process.crawl(WeiboSpider) process.start()
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、PDF搜索网站推荐 对于大部
linux系列之常用运维命令整理笔录
本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新 顺便拉下票,我在参加csdn博客之星竞选,欢迎投票支持,每个QQ或者微信每天都可以投5票,扫二维码即可,http://m234140.nofollow.ax.
Vue + Spring Boot 项目实战(十四):用户认证方案与完善的访问拦截
本篇文章主要讲解 token、session 等用户认证方案的区别并分析常见误区,以及如何通过前后端的配合实现完善的访问拦截,为下一步权限控制的实现打下基础。
比特币原理详解
一、什么是比特币 比特币是一种电子货币,是一种基于密码学的货币,在2008年11月1日由中本聪发表比特币白皮书,文中提出了一种去中心化的电子记账系统,我们平时的电子现金是银行来记账,因为银行的背后是国家信用。去中心化电子记账系统是参与者共同记账。比特币可以防止主权危机、信用风险。其好处不多做赘述,这一层面介绍的文章很多,本文主要从更深层的技术原理角度进行介绍。 二、问题引入  假设现有4个人
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发
网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
今天闲着无事,就想写点东西。然后听了下歌,就打算写个播放器。 于是乎用h5 audio的加上js简单的播放器完工了。 欢迎 改进 留言。 演示地点跳到演示地点 html代码如下`&lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head&gt; &lt;title&gt;music&lt;/title&gt; &lt;meta charset="utf-8"&gt
Python十大装B语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。 1. for - else 什么?不是 if 和 else 才
数据库优化 - SQL优化
前面一篇文章从实例的角度进行数据库优化,通过配置一些参数让数据库性能达到最优。但是一些“不好”的SQL也会导致数据库查询变慢,影响业务流程。本文从SQL角度进行数据库优化,提升SQL运行效率。 判断问题SQL 判断SQL是否有问题时可以通过两个表象进行判断: 系统级别表象 CPU消耗严重 IO等待严重 页面响应时间过长
2019年11月中国大陆编程语言排行榜
2019年11月2日,我统计了某招聘网站,获得有效程序员招聘数据9万条。针对招聘信息,提取编程语言关键字,并统计如下: 编程语言比例 rank pl_ percentage 1 java 33.62% 2 c/c++ 16.42% 3 c_sharp 12.82% 4 javascript 12.31% 5 python 7.93% 6 go 7.25% 7
通俗易懂地给女朋友讲:线程池的内部原理
餐厅的约会 餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”我楞了一下,心里想女朋友今天是怎么了,怎么突然问出这么专业的问题,但做为一个专业人士在女朋友面前也不能露怯啊,想了一下便说:“我先给你讲讲我前同事老王的故事吧!” 大龄程序员老王 老王是一个已经北漂十多年的程序员,岁数大了,加班加不动了,升迁也无望,于是拿着手里
经典算法(5)杨辉三角
写在前面: 我是 扬帆向海,这个昵称来源于我的名字以及女朋友的名字。我热爱技术、热爱开源、热爱编程。技术是开源的、知识是共享的。 这博客是对自己学习的一点点总结及记录,如果您对 Java、算法 感兴趣,可以关注我的动态,我们一起学习。 用知识改变命运,让我们的家人过上更好的生活。 目录一、杨辉三角的介绍二、杨辉三角的算法思想三、代码实现1.第一种写法2.第二种写法 一、杨辉三角的介绍 百度
腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹?
昨天,有网友私信我,说去阿里面试,彻底的被打击到了。问了为什么网上大量使用ThreadLocal的源码都会加上private static?他被难住了,因为他从来都没有考虑过这个问题。无独有偶,今天笔者又发现有网友吐槽了一道腾讯的面试题,我们一起来看看。 腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹? 在互联网职场论坛,一名程序员发帖求助到。二面腾讯,其中一个算法题:64匹
面试官:你连RESTful都不知道我怎么敢要你?
面试官:了解RESTful吗? 我:听说过。 面试官:那什么是RESTful? 我:就是用起来很规范,挺好的 面试官:是RESTful挺好的,还是自我感觉挺好的 我:都挺好的。 面试官:… 把门关上。 我:… 要干嘛?先关上再说。 面试官:我说出去把门关上。 我:what ?,夺门而去 文章目录01 前言02 RESTful的来源03 RESTful6大原则1. C-S架构2. 无状态3.统一的接
SQL-小白最佳入门sql查询一
一 说明 如果是初学者,建议去网上寻找安装Mysql的文章安装,以及使用navicat连接数据库,以后的示例基本是使用mysql数据库管理系统; 二 准备前提 需要建立一张学生表,列分别是id,名称,年龄,学生信息;本示例中文章篇幅原因SQL注释略; 建表语句: CREATE TABLE `student` ( `id` int(11) NOT NULL AUTO_INCREMENT, `
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // dosho
漫话:什么是平衡(AVL)树?这应该是把AVL树讲的最好的文章了
这篇文章通过对话的形式,由浅入深带你读懂 AVL 树,看完让你保证理解 AVL 树的各种操作,如果觉得不错,别吝啬你的赞哦。 1、若它的左子树不为空,则左子树上所有的节点值都小于它的根节点值。 2、若它的右子树不为空,则右子树上所有的节点值均大于它的根节点值。 3、它的左右子树也分别可以充当为二叉查找树。 例如: 例如,我现在想要查找数值为14的节点。由于二叉查找树的特性,我们可...
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,
程序员:我终于知道post和get的区别
IT界知名的程序员曾说:对于那些月薪三万以下,自称IT工程师的码农们,其实我们从来没有把他们归为我们IT工程师的队伍。他们虽然总是以IT工程师自居,但只是他们一厢情愿罢了。 此话一出,不知激起了多少(码农)程序员的愤怒,却又无可奈何,于是码农问程序员。 码农:你知道get和post请求到底有什么区别? 程序员:你看这篇就知道了。 码农:你月薪三万了? 程序员:嗯。 码农:你是怎么做到的? 程序员:
《程序人生》系列-这个程序员只用了20行代码就拿了冠军
你知道的越多,你不知道的越多 点赞再看,养成习惯GitHub上已经开源https://github.com/JavaFamily,有一线大厂面试点脑图,欢迎Star和完善 前言 这一期不算《吊打面试官》系列的,所有没前言我直接开始。 絮叨 本来应该是没有这期的,看过我上期的小伙伴应该是知道的嘛,双十一比较忙嘛,要值班又要去帮忙拍摄年会的视频素材,还得搞个程序员一天的Vlog,还要写BU
开源并不是你认为的那些事
点击上方蓝字 关注我们开源之道导读所以 ————想要理清开源是什么?先要厘清开源不是什么,名正言顺是句中国的古代成语,概念本身的理解非常之重要。大部分生物多样性的起源,...
加快推动区块链技术和产业创新发展,2019可信区块链峰会在京召开
      11月8日,由中国信息通信研究院、中国通信标准化协会、中国互联网协会、可信区块链推进计划联合主办,科技行者协办的2019可信区块链峰会将在北京悠唐皇冠假日酒店开幕。   区块链技术被认为是继蒸汽机、电力、互联网之后,下一代颠覆性的核心技术。如果说蒸汽机释放了人类的生产力,电力解决了人类基本的生活需求,互联网彻底改变了信息传递的方式,区块链作为构造信任的技术有重要的价值。   1
程序员把地府后台管理系统做出来了,还有3.0版本!12月7号最新消息:已在开发中有github地址
第一幕:缘起 听说阎王爷要做个生死簿后台管理系统,我们派去了一个程序员…… 996程序员做的梦: 第一场:团队招募 为了应对地府管理危机,阎王打算找“人”开发一套地府后台管理系统,于是就在地府总经办群中发了项目需求。 话说还是中国电信的信号好,地府都是满格,哈哈!!! 经常会有外行朋友问:看某网站做的不错,功能也简单,你帮忙做一下? 而这次,面对这样的需求,这个程序员
网易云6亿用户音乐推荐算法
网易云音乐是音乐爱好者的集聚地,云音乐推荐系统致力于通过 AI 算法的落地,实现用户千人千面的个性化推荐,为用户带来不一样的听歌体验。 本次分享重点介绍 AI 算法在音乐推荐中的应用实践,以及在算法落地过程中遇到的挑战和解决方案。 将从如下两个部分展开: AI 算法在音乐推荐中的应用 音乐场景下的 AI 思考 从 2013 年 4 月正式上线至今,网易云音乐平台持续提供着:乐屏社区、UGC
【技巧总结】位运算装逼指南
位算法的效率有多快我就不说,不信你可以去用 10 亿个数据模拟一下,今天给大家讲一讲位运算的一些经典例子。不过,最重要的不是看懂了这些例子就好,而是要在以后多去运用位运算这些技巧,当然,采用位运算,也是可以装逼的,不信,你往下看。我会从最简单的讲起,一道比一道难度递增,不过居然是讲技巧,那么也不会太难,相信你分分钟看懂。 判断奇偶数 判断一个数是基于还是偶数,相信很多人都做过,一般的做法的代码如下
《C++ Primer》学习笔记(六):C++模块设计——函数
专栏C++学习笔记 《C++ Primer》学习笔记/习题答案 总目录 https://blog.csdn.net/TeFuirnever/article/details/100700212 —————————————————————————————————————————————————————— 《C++ Primer》习题参考答案:第6章 - C++模块设计——函数 文章目录专栏C+...
8年经验面试官详解 Java 面试秘诀
    作者 | 胡书敏 责编 | 刘静 出品 | CSDN(ID:CSDNnews) 本人目前在一家知名外企担任架构师,而且最近八年来,在多家外企和互联网公司担任Java技术面试官,前后累计面试了有两三百位候选人。在本文里,就将结合本人的面试经验,针对Java初学者、Java初级开发和Java开发,给出若干准备简历和准备面试的建议。   Java程序员准备和投递简历的实
面试官如何考察你的思维方式?
1.两种思维方式在求职面试中,经常会考察这种问题:北京有多少量特斯拉汽车? 某胡同口的煎饼摊一年能卖出多少个煎饼? 深圳有多少个产品经理? 一辆公交车里能装下多少个乒乓球? 一
so easy! 10行代码写个"狗屁不通"文章生成器
前几天,GitHub 有个开源项目特别火,只要输入标题就可以生成一篇长长的文章。背后实现代码一定很复杂吧,里面一定有很多高深莫测的机器学习等复杂算法不过,当我看了源代码之后这程序不到50
知乎高赞:中国有什么拿得出手的开源软件产品?(整理自本人原创回答)
知乎高赞:中国有什么拿得出手的开源软件产品? 在知乎上,有个问题问“中国有什么拿得出手的开源软件产品(在 GitHub 等社区受欢迎度较好的)?” 事实上,还不少呢~ 本人于2019.7.6进行了较为全面的 回答 - Bravo Yeung,获得该问题下回答中得最高赞(236赞和1枚专业勋章),对这些受欢迎的 Github 开源项目分类整理如下: 分布式计算、云平台相关工具类 1.SkyWalk
相关热词 如何提升c#开发能力 矩阵乘法c# c#调用谷歌浏览器 c# 去空格去转义符 c#用户登录窗体代码 c# 流 c# linux 可视化 c# mvc 返回图片 c# 像素空间 c# 日期 最后一天
立即提问