【python-C相互调用】python里的dict如何作为参数传入.so中的c语言函数 10C

【python-C相互调用】关于python通过.so调用C函数来读取python里某个key的值并进行处理,一直无法将dict传到C中,求助
1. 首先是C中的包装函数定义

 static PyObject *
Extest_reverse(PyObject *self, PyObject *args,PyObject *keyds)  
{  
    //PyObject* keyds = PyDict_Keys(args);
    static char* kwlist[] = {"name",NULL};
    char *name;    //将dict中的name里的值读到char* name中

    PyObject* retval;  

    if(PyArg_ParseTupleAndKeywords(args,keyds,"isi",kwlist,&name))
    {
       retval = (PyObject *)Py_BuildValue("i",1);
       printf("%s",name);
       free(name);  
       return retval;  //成功读取返回1
    }
    else
    retval = (PyObject *)Py_BuildValue("i",0);
    return retval; //未读取返回0
} 
static PyMethodDef
ExtestMethods[] =
{
    {"reverse",(PyCFunction)Extest_reverse,METH_VARARGS | METH_KEYWORDS,"reverse"},
};
void initwmf()
{
    Py_InitModule("wmf",ExtestMethods);
}
  1. python里的调用 .so已生成,将python 中定义的dict作为参数输入
 import wmf 
test = {'name':'wmf'}
result = wmf.reverse(test)
print(result)

返回结果一直是0,未读到对应key值的value,进一步查验返现,test这个dict就没有传进去,传入参数是NULL。求助定义的问题,还是调用的问题?如何解决

1个回答

c语言没法直接接收python的对象,你不妨将dict先序列化,得到一个字符串,比如类似
[{"a":1},{"b":2}...]这样的,然后传给c语言的函数处理。

weixin_42486445
内拉祖里0420 python.h里的 pyobject应该就是 直接接收python里的数据,在c中读取处理的啊;而且如果dict都转成字符串了,就没有key不key一说了啊,那PyArg_ParseTupleAndKeywords这是函数还有啥存在的意义?
接近 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
在c语言程序中调用python脚本

最近在研究yolo,想在yolo源码(c语言)中调用随机森林算法来判断各检测框之间的关系。 只针对行人出检测框,提取框与框之间的四个参数:交并比、中心点距离、颜色直方图差值、面积差。以此作为输入参数。 先利用python完成了模型的训练并保存。在服务器上模拟调用也是可行的。随机生成数据,通过模型判断。 部分代码如下:test.c srand((unsigned)time(NULL)); for (i=0;i<50;i++){ io = rand()/(double)(RAND_MAX); printf("iou:%f\n",io); dist = rand()/(double)(RAND_MAX/100); printf("distance:%f\n",dist); su = rand()/(double)(RAND_MAX/100); printf("sub:%f\n",su); sua = rand()%50000; printf("suba:%d\n",sua); Py_Initialize(); if(!Py_IsInitialized()) { printf("Python init failed!\n"); return; } PyRun_SimpleString("import sys"); PyRun_SimpleString("sys.path.append('//home//wangxiangsheng//wuhao//test')"); PyObject *pName = NULL; PyObject *pModule = NULL; PyObject *pDict = NULL; PyObject *pFunc = NULL; PyObject *pArgs = NULL; PyObject *pResult = NULL; pName = PyString_FromString("RF"); pModule = PyImport_Import(pName); pDict = PyModule_GetDict(pModule); pFunc = PyDict_GetItemString(pDict,"randomF"); pArgs = Py_BuildValue("(f,f,f,i)",io,dist,su,sua); pResult = PyObject_CallObject(pFunc,pArgs); PyArg_Parse(pResult, "i", &res); printf("result is %d\n",res); ``` 调用的python脚本:RF.py ``` import sklearn as skl from sklearn.externals import joblib from sklearn.ensemble import RandomForestClassifier def randomF(iou,distance,sub,suba): test_data = [[iou,distance,sub,suba]] clf = joblib.load("//home//wangxiangsheng//wuhao//train_model.m") output = clf.predict(test_data) print output return output 但是,当我按照这样改写yolo源码之后,运行起来就会出问题, ![图片说明](https://img-ask.csdn.net/upload/201803/05/1520231552_54452.jpg) 第一帧有数据,没画面,第二帧就直接卡住了。 代码较多,放部分片断 ``` Py_Initialize(); if(!Py_IsInitialized()) { printf("Python init failed!\n"); return; } PyRun_SimpleString("import sys"); PyRun_SimpleString("sys.path.append('//home//wangxiangsheng//darknet//src')"); PyObject *pName = NULL; PyObject *pModule = NULL; PyObject *pDict = NULL; PyObject *pFunc = NULL; PyObject *pArgs = NULL; PyObject *pResult = NULL; pName = PyString_FromString("RF"); pModule = PyImport_Import(pName); if(!pModule) { printf("Load RF.py failed!\n"); getchar(); } pDict = PyModule_GetDict(pModule); if(!pDict) { printf("Can't find dict in RF!\n"); } pFunc = PyDict_GetItemString(pDict,"randomF"); if(!pFunc || !PyCallable_Check(pFunc)) { printf("Can't find function!\n"); getchar(); } for(j=0;j<10;j++){ for(w=j+1;w<39;w++){ float media = box_iou(para[j].p, para[w].p); float iout; if (media<=0){ iout = 0.000000; } else { iout = media; } int p,suba; float res; suba = abs(para[j].barea-para[w].barea); float sub=0; for(p=0;p<64;p++){ sub = sub + pow(para[j].hist[p]-para[w].hist[p],2); } float distance; distance = sqrt(pow(para[w].p.x-para[j].p.x,2)+pow(para[w].p.y-para[j].p.y,2)); printf("%f-%f-%f-%d \n",iout,distance,sub,suba); pArgs = Py_BuildValue("(f,f,f,i)",iout,distance,sub,suba); pResult = PyObject_CallObject(pFunc,pArgs); PyArg_Parse(pResult, "f", &res); printf("result is %f\n",res); ``` 求哪位指导一下,感激不尽!

C++调用python脚本(test.py这个脚本中import numpy)程序崩溃

我想在c++中调用python的一个脚本,这个脚本中我只是import了一个numpy就报错了,而如果是简单的脚本(没有import第三方库)就不会出错,我已经把: INCLUDEPATH += C:/Python27/include/ LIBS += C:/Python27/libs/python27.lib 添加进去了, ``` pyrun_simplestring("import sys"); pyrun_simplestring("import numpy"); pyrun_simplestring("sys.path.append('c:\python27\lib\site-packages\')"); pyerr_print(); pyobject * pmodule = null; pyobject * pfunc = null; pmodule =pyimport_importmodule("test_my"); //test001:python文件名 pfunc= pyobject_getattrstring(pmodule, "testdict"); //add:python文件中的函数名 pyobject *pargs = pytuple_new(1); pyobject *pdict = pydict_new(); //创建字典类型变量 pydict_setitemstring(pdict, "name", py_buildvalue("s", "wangyao")); //往字典类型变量中填充数据 pydict_setitemstring(pdict, "age", py_buildvalue("i", 25)); //往字典类型变量中填充数据 pytuple_setitem(pargs, 0, pdict); //0---序号 将字典类型变量添加到参数元组中 pyobject *preturn = null; preturn = pyeval_callobject(pfunc, pargs); //调用函数 int size = pydict_size(preturn); cout << "返回字典的大小为: " << size << endl; pyobject *pnewage = pydict_getitemstring(preturn, "age"); int newage; pyarg_parse(pnewage, "i", &newage); cout << "true age: " << newage << endl; py_finalize(); ``` 这是python的脚本: ``` #import numpy as np def HelloWorld(): print "Hello World" def add(a, b): #tmp=np.random.randint(10,88) return a+b def TestDict(dict): print dict dict["Age"] = 17 return dict class Person: def greet(self, greetStr): print greetStr #print add(5,7) #a = raw_input("Enter To Continue...") ``` 老是报错,但如果我把import numpy去掉就没问题,求大神解答,困扰好久了~~~

Python函数参数 - 星号参数 的一些小疑问!

学过python的都知道,函数参数可以带星号,单星号时将未知数量的参数封装在tuple中, 双星号则封装在dict ,那么疑问就随之而来了,函数名后的带星号参数 和 函数体中调用 参数时不带星号,区别在哪? 看下图: ![图片说明](https://img-ask.csdn.net/upload/201710/28/1509175953_604644.png) 画红框的都是函数参数,那么它们的区别在哪?

C++调用python 控制台可以成功,mfc失败,python脚本里依赖tensorflow

x64控制台与MFC控制台同样的配置; 关键C++代码如下: ``` #define PY_modePath L"E:\\Anaconda\\envs\\asr\\" ``` Py_SetPythonHome(PY_modePath); pModule = PyImport_ImportModule(aasr.c_str());//mfc是null 控制台是OK的 python代码如下: ``` #!/usr/bin/env python3 # -*- coding: utf-8 -*- ``` """ @author: sly """ import platform as plat import os import time from general_function.file_wav import * from general_function.file_dict import * from general_function.gen_func import * import numpy as np import random from keras.models import Sequential, Model from keras.layers import Dense, Dropout, Input, Reshape, BatchNormalization # , Flatten from keras.layers import Lambda, TimeDistributed, Activation,Conv2D, MaxPooling2D #, Merge from keras import backend as K from keras.optimizers import SGD, Adadelta, Adam ``` ``` 路径检查多边没有问题. 对边了加载脚本时C++输出:

用java程序调用python,tensorflow模型便不能由python程序读入了

python程序读取tensorflow模型和词向量模型。 我的java程序是一个web,用的spring框架。 没用java程序的调用的时候,python程序可以正常运行 调用过后,python中的saver=tf.train.Saver()报错 显示ValueError: No variables to save java得到的是null 想问如何使得python在被调用的情况下仍然能够正确读取模型。

c调用python, 内存泄露问题,弄了好久,请教大神,万分感激!

空间都释放了的,为什么多次调用此函数时,占用内存长的很快,确认了调用的python函数没有内存泄露问题 bool CallPyWaveletConvert(STWaveletConvertInfo& info) { PyObject* pArgs = PyTuple_New(1); PyObject* pList = PyList_New(0); int iLen = info.m_iInputDataLen; for (int i = 0; i < iLen; i++) { PyObject* pValue = PyFloat_FromDouble(info.m_fInputData[i]); PyList_Append(pList, pValue); } PyTuple_SetItem(pArgs, 0, pList); PyObject* pRet = PyEval_CallObject(pFuncWaveletConvert, pArgs); info.m_iOutputDataLen = PyList_Size(pRet); for(int i=0;i<info.m_iOutputDataLen;++i) { PyObject *pNewAge = PyList_GetItem(pRet,i); PyArg_Parse(pNewAge, "d", &info.m_fOutputData[i]); } Py_XDECREF(pList); Py_XDECREF(pRet); return true; }

为什么Python中dict的查找速度和list一样?

用Python写了段程序,其中一部分是在2^20个数据中的查找,可是用dict实现起来慢, 后来发现改用list后竟然和之前的速度一样,请问这可能是什么原因呢?代码在这里 (http://ask.csdn.net/questions/224028 "")

Python中map与dict的组合用法和匿名函数的参数传递

初学Python,问的问题有些低级,恳望各位前辈赐教 1. 在数据转换中有这样一段代码 lowercased.map(mean_to_animal) 其中lowercased为一个Series, mean_to_animal为一个dict, 目的是通过lowercased中的元素来匹配mean_to_animal的key,从而得到其中的value值 想问的问题是一般map函数()内不应该是加函数吗,像这样加字典dict也是可行的吗,是这里的字典也可以当做函数吗? 2. 匿名函数和map的组合(主要是参数传递不理解) data['food'].map(lambda x : meat_to_animal [x.lower( )] ) 其中data为一个DataFrame, 'food'为其中一列, mean_to_animal为一个dict, 目的是将'food’列中元素转为小写然后匹配 mean_to_animal字典中的value 问题是① lambda 后不是一般加表达式吗,这样meat_to_animal [],不是相当于输入key提取value吗,这样也算表达式吗 ; ② 一般函数传递不是 函数名(参数)吗, 可是这里边data['food']中的元素是怎么传递给后边的lambda的呢

python3.6 复杂string转成dict

'{"id": 111,"texts": [{}], "is_tokenized": false}'.format("query") 有个字符串如上所示,想把以上的字符串转成dict,考虑到可以使用eval或者ast.literal_eval,但是尝试了好多种方法,始终没有成功,求助大神

python dict根据value查找对用的key

有一个dict,不知道key是什么,现在想根据value的值去得出key, 比如,temp={'a':1},我想找出value为1的key,即a,但是并不知道这个key到底是数字还是字符或者是字符串。 可否有什么好的方法?

python 字典 dict 获取值

obj={ "n":1, "e":2 } print obj.n AttributeError: 'dict' object has no attribute 'n' 我想用 obj.n这个获取值而不是 obj["n"] 需要怎么修改

PYTHON3.X 中, EXEC()函数参数的小白问题.

1. 为何在函数内部使用EXEC函数,无论加上globals()和locals()参数, 均不能改变函数内部变量的值? 2.怎样让EXEC实现像在函数内部一条语句一样等同的效果? 3. 见到一个实例 d=dict(locals(), **globals()) 为什么在不是定义函数的时候, 可以使用两个星号的 实参 ? (实际运行后没任何问题) 望获高手指点迷津.

用Python安装scrapy第三方库时安装失败怎么办

ERROR: Command errored out with exit status 1: command: 'c:\program files\python37\python.exe' -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'C:\\Users\\22348\\AppData\\Local\\Temp\\pip-install-s_hynvin\\Twisted\\setup.py'"'"'; __file__='"'"'C:\\Users\\22348\\AppData\\Local\\Temp\\pip-install-s_hynvin\\Twisted\\setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' bdist_wheel -d 'C:\Users\22348\AppData\Local\Temp\pip-wheel-4c5rcjky' --python-tag cp37 cwd: C:\Users\22348\AppData\Local\Temp\pip-install-s_hynvin\Twisted\ Complete output (943 lines): running bdist_wheel running build running build_py creating build creating build\lib.win-amd64-3.7 creating build\lib.win-amd64-3.7\twisted copying src\twisted\copyright.py -> build\lib.win-amd64-3.7\twisted copying src\twisted\plugin.py -> build\lib.win-amd64-3.7\twisted copying src\twisted\_version.py -> build\lib.win-amd64-3.7\twisted copying src\twisted\__init__.py -> build\lib.win-amd64-3.7\twisted copying src\twisted\__main__.py -> build\lib.win-amd64-3.7\twisted creating build\lib.win-amd64-3.7\twisted\application copying src\twisted\application\app.py -> build\lib.win-amd64-3.7\twisted\application copying src\twisted\application\internet.py -> build\lib.win-amd64-3.7\twisted\application copying src\twisted\application\reactors.py -> build\lib.win-amd64-3.7\twisted\application copying src\twisted\application\service.py -> build\lib.win-amd64-3.7\twisted\application copying src\twisted\application\strports.py -> build\lib.win-amd64-3.7\twisted\application copying src\twisted\application\__init__.py -> build\lib.win-amd64-3.7\twisted\application creating build\lib.win-amd64-3.7\twisted\conch copying src\twisted\conch\avatar.py -> build\lib.win-amd64-3.7\twisted\conch copying src\twisted\conch\checkers.py -> build\lib.win-amd64-3.7\twisted\conch copying src\twisted\conch\endpoints.py -> build\lib.win-amd64-3.7\twisted\conch copying src\twisted\conch\error.py -> build\lib.win-amd64-3.7\twisted\conch copying src\twisted\conch\interfaces.py -> build\lib.win-amd64-3.7\twisted\conch copying src\twisted\conch\ls.py -> build\lib.win-amd64-3.7\twisted\conch copying src\twisted\conch\manhole.py -> build\lib.win-amd64-3.7\twisted\conch copying src\twisted\conch\manhole_ssh.py -> build\lib.win-amd64-3.7\twisted\conch copying src\twisted\conch\manhole_tap.py -> build\lib.win-amd64-3.7\twisted\conch copying src\twisted\conch\mixin.py -> build\lib.win-amd64-3.7\twisted\conch copying src\twisted\conch\recvline.py -> build\lib.win-amd64-3.7\twisted\conch copying src\twisted\conch\stdio.py -> build\lib.win-amd64-3.7\twisted\conch copying src\twisted\conch\tap.py -> build\lib.win-amd64-3.7\twisted\conch copying src\twisted\conch\telnet.py -> build\lib.win-amd64-3.7\twisted\conch copying src\twisted\conch\ttymodes.py -> build\lib.win-amd64-3.7\twisted\conch copying src\twisted\conch\unix.py -> build\lib.win-amd64-3.7\twisted\conch copying src\twisted\conch\__init__.py -> build\lib.win-amd64-3.7\twisted\conch creating build\lib.win-amd64-3.7\twisted\cred copying src\twisted\cred\checkers.py -> build\lib.win-amd64-3.7\twisted\cred copying src\twisted\cred\credentials.py -> build\lib.win-amd64-3.7\twisted\cred copying src\twisted\cred\error.py -> build\lib.win-amd64-3.7\twisted\cred copying src\twisted\cred\portal.py -> build\lib.win-amd64-3.7\twisted\cred copying src\twisted\cred\strcred.py -> build\lib.win-amd64-3.7\twisted\cred copying src\twisted\cred\_digest.py -> build\lib.win-amd64-3.7\twisted\cred copying src\twisted\cred\__init__.py -> build\lib.win-amd64-3.7\twisted\cred creating build\lib.win-amd64-3.7\twisted\enterprise copying src\twisted\enterprise\adbapi.py -> build\lib.win-amd64-3.7\twisted\enterprise copying src\twisted\enterprise\__init__.py -> build\lib.win-amd64-3.7\twisted\enterprise creating build\lib.win-amd64-3.7\twisted\internet copying src\twisted\internet\abstract.py -> build\lib.win-amd64-3.7\twisted\internet copying src\twisted\internet\address.py -> build\lib.win-amd64-3.7\twisted\internet copying src\twisted\internet\asyncioreactor.py -> build\lib.win-amd64-3.7\twisted\internet copying src\twisted\internet\base.py -> build\lib.win-amd64-3.7\twisted\internet copying src\twisted\internet\cfreactor.py -> build\lib.win-amd64-3.7\twisted\internet copying src\twisted\internet\default.py -> build\lib.win-amd64-3.7\twisted\internet copying src\twisted\internet\defer.py -> build\lib.win-amd64-3.7\twisted\internet copying src\twisted\internet\endpoints.py -> build\lib.win-amd64-3.7\twisted\internet copying src\twisted\internet\epollreactor.py -> build\lib.win-amd64-3.7\twisted\internet copying src\twisted\internet\error.py -> build\lib.win-amd64-3.7\twisted\internet copying src\twisted\internet\fdesc.py -> build\lib.win-amd64-3.7\twisted\internet copying src\twisted\internet\gireactor.py -> build\lib.win-amd64-3.7\twisted\internet copying src\twisted\internet\glib2reactor.py -> build\lib.win-amd64-3.7\twisted\internet copying src\twisted\internet\gtk2reactor.py -> build\lib.win-amd64-3.7\twisted\internet copying src\twisted\internet\gtk3reactor.py -> build\lib.win-amd64-3.7\twisted\internet copying src\twisted\internet\inotify.py -> build\lib.win-amd64-3.7\twisted\internet copying src\twisted\internet\interfaces.py -> build\lib.win-amd64-3.7\twisted\internet copying src\twisted\internet\kqreactor.py -> build\lib.win-amd64-3.7\twisted\internet copying src\twisted\internet\main.py -> build\lib.win-amd64-3.7\twisted\internet copying src\twisted\internet\pollreactor.py -> build\lib.win-amd64-3.7\twisted\internet copying src\twisted\internet\posixbase.py -> build\lib.win-amd64-3.7\twisted\internet copying src\twisted\internet\process.py -> build\lib.win-amd64-3.7\twisted\internet copying src\twisted\internet\protocol.py -> build\lib.win-amd64-3.7\twisted\internet copying src\twisted\internet\pyuisupport.py -> build\lib.win-amd64-3.7\twisted\internet copying src\twisted\internet\reactor.py -> build\lib.win-amd64-3.7\twisted\internet copying src\twisted\internet\selectreactor.py -> build\lib.win-amd64-3.7\twisted\internet copying src\twisted\internet\serialport.py -> build\lib.win-amd64-3.7\twisted\internet copying src\twisted\internet\ssl.py -> build\lib.win-amd64-3.7\twisted\internet copying src\twisted\internet\stdio.py -> build\lib.win-amd64-3.7\twisted\internet copying src\twisted\internet\task.py -> build\lib.win-amd64-3.7\twisted\internet copying src\twisted\internet\tcp.py -> build\lib.win-amd64-3.7\twisted\internet copying src\twisted\internet\threads.py -> build\lib.win-amd64-3.7\twisted\internet copying src\twisted\internet\tksupport.py -> build\lib.win-amd64-3.7\twisted\internet copying src\twisted\internet\udp.py -> build\lib.win-amd64-3.7\twisted\internet copying src\twisted\internet\unix.py -> build\lib.win-amd64-3.7\twisted\internet copying src\twisted\internet\utils.py -> build\lib.win-amd64-3.7\twisted\internet copying src\twisted\internet\win32eventreactor.py -> build\lib.win-amd64-3.7\twisted\internet copying src\twisted\internet\wxreactor.py -> build\lib.win-amd64-3.7\twisted\internet copying src\twisted\internet\wxsupport.py -> build\lib.win-amd64-3.7\twisted\internet copying src\twisted\internet\_baseprocess.py -> build\lib.win-amd64-3.7\twisted\internet copying src\twisted\internet\_dumbwin32proc.py -> build\lib.win-amd64-3.7\twisted\internet copying src\twisted\internet\_glibbase.py -> build\lib.win-amd64-3.7\twisted\internet copying src\twisted\internet\_idna.py -> build\lib.win-amd64-3.7\twisted\internet copying src\twisted\internet\_newtls.py -> build\lib.win-amd64-3.7\twisted\internet copying src\twisted\internet\_pollingfile.py -> build\lib.win-amd64-3.7\twisted\internet copying src\twisted\internet\_posixserialport.py -> build\lib.win-amd64-3.7\twisted\internet copying src\twisted\internet\_posixstdio.py -> build\lib.win-amd64-3.7\twisted\internet copying src\twisted\internet\_producer_helpers.py -> build\lib.win-amd64-3.7\twisted\internet copying src\twisted\internet\_resolver.py -> build\lib.win-amd64-3.7\twisted\internet copying src\twisted\internet\_signals.py -> build\lib.win-amd64-3.7\twisted\internet copying src\twisted\internet\_sslverify.py -> build\lib.win-amd64-3.7\twisted\internet copying src\twisted\internet\_threadedselect.py -> build\lib.win-amd64-3.7\twisted\internet copying src\twisted\internet\_win32serialport.py -> build\lib.win-amd64-3.7\twisted\internet copying src\twisted\internet\_win32stdio.py -> build\lib.win-amd64-3.7\twisted\internet copying src\twisted\internet\__init__.py -> build\lib.win-amd64-3.7\twisted\internet creating build\lib.win-amd64-3.7\twisted\logger copying src\twisted\logger\_buffer.py -> build\lib.win-amd64-3.7\twisted\logger copying src\twisted\logger\_file.py -> build\lib.win-amd64-3.7\twisted\logger copying src\twisted\logger\_filter.py -> build\lib.win-amd64-3.7\twisted\logger copying src\twisted\logger\_flatten.py -> build\lib.win-amd64-3.7\twisted\logger copying src\twisted\logger\_format.py -> build\lib.win-amd64-3.7\twisted\logger copying src\twisted\logger\_global.py -> build\lib.win-amd64-3.7\twisted\logger copying src\twisted\logger\_io.py -> build\lib.win-amd64-3.7\twisted\logger copying src\twisted\logger\_json.py -> build\lib.win-amd64-3.7\twisted\logger copying src\twisted\logger\_legacy.py -> build\lib.win-amd64-3.7\twisted\logger copying src\twisted\logger\_levels.py -> build\lib.win-amd64-3.7\twisted\logger copying src\twisted\logger\_logger.py -> build\lib.win-amd64-3.7\twisted\logger copying src\twisted\logger\_observer.py -> build\lib.win-amd64-3.7\twisted\logger copying src\twisted\logger\_stdlib.py -> build\lib.win-amd64-3.7\twisted\logger copying src\twisted\logger\_util.py -> build\lib.win-amd64-3.7\twisted\logger copying src\twisted\logger\__init__.py -> build\lib.win-amd64-3.7\twisted\logger creating build\lib.win-amd64-3.7\twisted\mail copying src\twisted\mail\imap4.py -> build\lib.win-amd64-3.7\twisted\mail copying src\twisted\mail\interfaces.py -> build\lib.win-amd64-3.7\twisted\mail copying src\twisted\mail\pop3.py -> build\lib.win-amd64-3.7\twisted\mail copying src\twisted\mail\pop3client.py -> build\lib.win-amd64-3.7\twisted\mail copying src\twisted\mail\protocols.py -> build\lib.win-amd64-3.7\twisted\mail copying src\twisted\mail\relay.py -> build\lib.win-amd64-3.7\twisted\mail copying src\twisted\mail\smtp.py -> build\lib.win-amd64-3.7\twisted\mail copying src\twisted\mail\_cred.py -> build\lib.win-amd64-3.7\twisted\mail copying src\twisted\mail\_except.py -> build\lib.win-amd64-3.7\twisted\mail copying src\twisted\mail\__init__.py -> build\lib.win-amd64-3.7\twisted\mail creating build\lib.win-amd64-3.7\twisted\names copying src\twisted\names\authority.py -> build\lib.win-amd64-3.7\twisted\names copying src\twisted\names\cache.py -> build\lib.win-amd64-3.7\twisted\names copying src\twisted\names\client.py -> build\lib.win-amd64-3.7\twisted\names copying src\twisted\names\common.py -> build\lib.win-amd64-3.7\twisted\names copying src\twisted\names\dns.py -> build\lib.win-amd64-3.7\twisted\names copying src\twisted\names\error.py -> build\lib.win-amd64-3.7\twisted\names copying src\twisted\names\hosts.py -> build\lib.win-amd64-3.7\twisted\names copying src\twisted\names\resolve.py -> build\lib.win-amd64-3.7\twisted\names copying src\twisted\names\root.py -> build\lib.win-amd64-3.7\twisted\names copying src\twisted\names\secondary.py -> build\lib.win-amd64-3.7\twisted\names copying src\twisted\names\server.py -> build\lib.win-amd64-3.7\twisted\names copying src\twisted\names\srvconnect.py -> build\lib.win-amd64-3.7\twisted\names copying src\twisted\names\tap.py -> build\lib.win-amd64-3.7\twisted\names copying src\twisted\names\_rfc1982.py -> build\lib.win-amd64-3.7\twisted\names copying src\twisted\names\__init__.py -> build\lib.win-amd64-3.7\twisted\names creating build\lib.win-amd64-3.7\twisted\pair copying src\twisted\pair\ethernet.py -> build\lib.win-amd64-3.7\twisted\pair copying src\twisted\pair\ip.py -> build\lib.win-amd64-3.7\twisted\pair copying src\twisted\pair\raw.py -> build\lib.win-amd64-3.7\twisted\pair copying src\twisted\pair\rawudp.py -> build\lib.win-amd64-3.7\twisted\pair copying src\twisted\pair\testing.py -> build\lib.win-amd64-3.7\twisted\pair copying src\twisted\pair\tuntap.py -> build\lib.win-amd64-3.7\twisted\pair copying src\twisted\pair\__init__.py -> build\lib.win-amd64-3.7\twisted\pair creating build\lib.win-amd64-3.7\twisted\persisted copying src\twisted\persisted\aot.py -> build\lib.win-amd64-3.7\twisted\persisted copying src\twisted\persisted\crefutil.py -> build\lib.win-amd64-3.7\twisted\persisted copying src\twisted\persisted\dirdbm.py -> build\lib.win-amd64-3.7\twisted\persisted copying src\twisted\persisted\sob.py -> build\lib.win-amd64-3.7\twisted\persisted copying src\twisted\persisted\styles.py -> build\lib.win-amd64-3.7\twisted\persisted copying src\twisted\persisted\__init__.py -> build\lib.win-amd64-3.7\twisted\persisted creating build\lib.win-amd64-3.7\twisted\plugins copying src\twisted\plugins\cred_anonymous.py -> build\lib.win-amd64-3.7\twisted\plugins copying src\twisted\plugins\cred_file.py -> build\lib.win-amd64-3.7\twisted\plugins copying src\twisted\plugins\cred_memory.py -> build\lib.win-amd64-3.7\twisted\plugins copying src\twisted\plugins\cred_sshkeys.py -> build\lib.win-amd64-3.7\twisted\plugins copying src\twisted\plugins\cred_unix.py -> build\lib.win-amd64-3.7\twisted\plugins copying src\twisted\plugins\twisted_conch.py -> build\lib.win-amd64-3.7\twisted\plugins copying src\twisted\plugins\twisted_core.py -> build\lib.win-amd64-3.7\twisted\plugins copying src\twisted\plugins\twisted_ftp.py -> build\lib.win-amd64-3.7\twisted\plugins copying src\twisted\plugins\twisted_inet.py -> build\lib.win-amd64-3.7\twisted\plugins copying src\twisted\plugins\twisted_names.py -> build\lib.win-amd64-3.7\twisted\plugins copying src\twisted\plugins\twisted_portforward.py -> build\lib.win-amd64-3.7\twisted\plugins copying src\twisted\plugins\twisted_reactors.py -> build\lib.win-amd64-3.7\twisted\plugins copying src\twisted\plugins\twisted_runner.py -> build\lib.win-amd64-3.7\twisted\plugins copying src\twisted\plugins\twisted_socks.py -> build\lib.win-amd64-3.7\twisted\plugins copying src\twisted\plugins\twisted_trial.py -> build\lib.win-amd64-3.7\twisted\plugins copying src\twisted\plugins\twisted_web.py -> build\lib.win-amd64-3.7\twisted\plugins copying src\twisted\plugins\twisted_words.py -> build\lib.win-amd64-3.7\twisted\plugins copying src\twisted\plugins\__init__.py -> build\lib.win-amd64-3.7\twisted\plugins creating build\lib.win-amd64-3.7\twisted\positioning copying src\twisted\positioning\base.py -> build\lib.win-amd64-3.7\twisted\positioning copying src\twisted\positioning\ipositioning.py -> build\lib.win-amd64-3.7\twisted\positioning copying src\twisted\positioning\nmea.py -> build\lib.win-amd64-3.7\twisted\positioning copying src\twisted\positioning\_sentence.py -> build\lib.win-amd64-3.7\twisted\positioning copying src\twisted\positioning\__init__.py -> build\lib.win-amd64-3.7\twisted\positioning creating build\lib.win-amd64-3.7\twisted\protocols copying src\twisted\protocols\amp.py -> build\lib.win-amd64-3.7\twisted\protocols copying src\twisted\protocols\basic.py -> build\lib.win-amd64-3.7\twisted\protocols copying src\twisted\protocols\dict.py -> build\lib.win-amd64-3.7\twisted\protocols copying src\twisted\protocols\finger.py -> build\lib.win-amd64-3.7\twisted\protocols copying src\twisted\protocols\ftp.py -> build\lib.win-amd64-3.7\twisted\protocols copying src\twisted\protocols\htb.py -> build\lib.win-amd64-3.7\twisted\protocols copying src\twisted\protocols\ident.py -> build\lib.win-amd64-3.7\twisted\protocols copying src\twisted\protocols\loopback.py -> build\lib.win-amd64-3.7\twisted\protocols copying src\twisted\protocols\memcache.py -> build\lib.win-amd64-3.7\twisted\protocols copying src\twisted\protocols\pcp.py -> build\lib.win-amd64-3.7\twisted\protocols copying src\twisted\protocols\policies.py -> build\lib.win-amd64-3.7\twisted\protocols copying src\twisted\protocols\portforward.py -> build\lib.win-amd64-3.7\twisted\protocols copying src\twisted\protocols\postfix.py -> build\lib.win-amd64-3.7\twisted\protocols copying src\twisted\protocols\sip.py -> build\lib.win-amd64-3.7\twisted\protocols copying src\twisted\protocols\socks.py -> build\lib.win-amd64-3.7\twisted\protocols copying src\twisted\protocols\stateful.py -> build\lib.win-amd64-3.7\twisted\protocols copying src\twisted\protocols\tls.py -> build\lib.win-amd64-3.7\twisted\protocols copying src\twisted\protocols\wire.py -> build\lib.win-amd64-3.7\twisted\protocols copying src\twisted\protocols\__init__.py -> build\lib.win-amd64-3.7\twisted\protocols creating build\lib.win-amd64-3.7\twisted\python copying src\twisted\python\compat.py -> build\lib.win-amd64-3.7\twisted\python copying src\twisted\python\components.py -> build\lib.win-amd64-3.7\twisted\python copying src\twisted\python\constants.py -> build\lib.win-amd64-3.7\twisted\python copying src\twisted\python\context.py -> build\lib.win-amd64-3.7\twisted\python copying src\twisted\python\deprecate.py -> build\lib.win-amd64-3.7\twisted\python copying src\twisted\python\failure.py -> build\lib.win-amd64-3.7\twisted\python copying src\twisted\python\fakepwd.py -> build\lib.win-amd64-3.7\twisted\python copying src\twisted\python\filepath.py -> build\lib.win-amd64-3.7\twisted\python copying src\twisted\python\formmethod.py -> build\lib.win-amd64-3.7\twisted\python copying src\twisted\python\htmlizer.py -> build\lib.win-amd64-3.7\twisted\python copying src\twisted\python\lockfile.py -> build\lib.win-amd64-3.7\twisted\python copying src\twisted\python\log.py -> build\lib.win-amd64-3.7\twisted\python copying src\twisted\python\logfile.py -> build\lib.win-amd64-3.7\twisted\python copying src\twisted\python\modules.py -> build\lib.win-amd64-3.7\twisted\python copying src\twisted\python\monkey.py -> build\lib.win-amd64-3.7\twisted\python copying src\twisted\python\procutils.py -> build\lib.win-amd64-3.7\twisted\python copying src\twisted\python\randbytes.py -> build\lib.win-amd64-3.7\twisted\python copying src\twisted\python\rebuild.py -> build\lib.win-amd64-3.7\twisted\python copying src\twisted\python\reflect.py -> build\lib.win-amd64-3.7\twisted\python copying src\twisted\python\release.py -> build\lib.win-amd64-3.7\twisted\python copying src\twisted\python\roots.py -> build\lib.win-amd64-3.7\twisted\python copying src\twisted\python\runtime.py -> build\lib.win-amd64-3.7\twisted\python copying src\twisted\python\sendmsg.py -> build\lib.win-amd64-3.7\twisted\python copying src\twisted\python\shortcut.py -> build\lib.win-amd64-3.7\twisted\python copying src\twisted\python\syslog.py -> build\lib.win-amd64-3.7\twisted\python copying src\twisted\python\systemd.py -> build\lib.win-amd64-3.7\twisted\python copying src\twisted\python\text.py -> build\lib.win-amd64-3.7\twisted\python copying src\twisted\python\threadable.py -> build\lib.win-amd64-3.7\twisted\python copying src\twisted\python\threadpool.py -> build\lib.win-amd64-3.7\twisted\python copying src\twisted\python\url.py -> build\lib.win-amd64-3.7\twisted\python copying src\twisted\python\urlpath.py -> build\lib.win-amd64-3.7\twisted\python copying src\twisted\python\usage.py -> build\lib.win-amd64-3.7\twisted\python copying src\twisted\python\util.py -> build\lib.win-amd64-3.7\twisted\python copying src\twisted\python\versions.py -> build\lib.win-amd64-3.7\twisted\python copying src\twisted\python\win32.py -> build\lib.win-amd64-3.7\twisted\python copying src\twisted\python\zippath.py -> build\lib.win-amd64-3.7\twisted\python copying src\twisted\python\zipstream.py -> build\lib.win-amd64-3.7\twisted\python copying src\twisted\python\_appdirs.py -> build\lib.win-amd64-3.7\twisted\python copying src\twisted\python\_inotify.py -> build\lib.win-amd64-3.7\twisted\python copying src\twisted\python\_oldstyle.py -> build\lib.win-amd64-3.7\twisted\python copying src\twisted\python\_release.py -> build\lib.win-amd64-3.7\twisted\python copying src\twisted\python\_setup.py -> build\lib.win-amd64-3.7\twisted\python copying src\twisted\python\_shellcomp.py -> build\lib.win-amd64-3.7\twisted\python copying src\twisted\python\_textattributes.py -> build\lib.win-amd64-3.7\twisted\python copying src\twisted\python\_tzhelper.py -> build\lib.win-amd64-3.7\twisted\python copying src\twisted\python\_url.py -> build\lib.win-amd64-3.7\twisted\python copying src\twisted\python\__init__.py -> build\lib.win-amd64-3.7\twisted\python creating build\lib.win-amd64-3.7\twisted\runner copying src\twisted\runner\inetd.py -> build\lib.win-amd64-3.7\twisted\runner copying src\twisted\runner\inetdconf.py -> build\lib.win-amd64-3.7\twisted\runner copying src\twisted\runner\inetdtap.py -> build\lib.win-amd64-3.7\twisted\runner copying src\twisted\runner\procmon.py -> build\lib.win-amd64-3.7\twisted\runner copying src\twisted\runner\procmontap.py -> build\lib.win-amd64-3.7\twisted\runner copying src\twisted\runner\__init__.py -> build\lib.win-amd64-3.7\twisted\runner creating build\lib.win-amd64-3.7\twisted\scripts copying src\twisted\scripts\htmlizer.py -> build\lib.win-amd64-3.7\twisted\scripts copying src\twisted\scripts\trial.py -> build\lib.win-amd64-3.7\twisted\scripts copying src\twisted\scripts\twistd.py -> build\lib.win-amd64-3.7\twisted\scripts copying src\twisted\scripts\_twistd_unix.py -> build\lib.win-amd64-3.7\twisted\scripts copying src\twisted\scripts\_twistw.py -> build\lib.win-amd64-3.7\twisted\scripts copying src\twisted\scripts\__init__.py -> build\lib.win-amd64-3.7\twisted\scripts creating build\lib.win-amd64-3.7\twisted\spread copying src\twisted\spread\banana.py -> build\lib.win-amd64-3.7\twisted\spread copying src\twisted\spread\flavors.py -> build\lib.win-amd64-3.7\twisted\spread copying src\twisted\spread\interfaces.py -> build\lib.win-amd64-3.7\twisted\spread copying src\twisted\spread\jelly.py -> build\lib.win-amd64-3.7\twisted\spread copying src\twisted\spread\pb.py -> build\lib.win-amd64-3.7\twisted\spread copying src\twisted\spread\publish.py -> build\lib.win-amd64-3.7\twisted\spread copying src\twisted\spread\util.py -> build\lib.win-amd64-3.7\twisted\spread copying src\twisted\spread\__init__.py -> build\lib.win-amd64-3.7\twisted\spread creating build\lib.win-amd64-3.7\twisted\tap copying src\twisted\tap\ftp.py -> build\lib.win-amd64-3.7\twisted\tap copying src\twisted\tap\portforward.py -> build\lib.win-amd64-3.7\twisted\tap copying src\twisted\tap\socks.py -> build\lib.win-amd64-3.7\twisted\tap copying src\twisted\tap\__init__.py -> build\lib.win-amd64-3.7\twisted\tap creating build\lib.win-amd64-3.7\twisted\test copying src\twisted\test\crash_test_dummy.py -> build\lib.win-amd64-3.7\twisted\test copying src\twisted\test\iosim.py -> build\lib.win-amd64-3.7\twisted\test copying src\twisted\test\mock_win32process.py -> build\lib.win-amd64-3.7\twisted\test copying src\twisted\test\myrebuilder1.py -> build\lib.win-amd64-3.7\twisted\test copying src\twisted\test\myrebuilder2.py -> build\lib.win-amd64-3.7\twisted\test copying src\twisted\test\plugin_basic.py -> build\lib.win-amd64-3.7\twisted\test copying src\twisted\test\plugin_extra1.py -> build\lib.win-amd64-3.7\twisted\test copying src\twisted\test\plugin_extra2.py -> build\lib.win-amd64-3.7\twisted\test copying src\twisted\test\process_cmdline.py -> build\lib.win-amd64-3.7\twisted\test copying src\twisted\test\process_echoer.py -> build\lib.win-amd64-3.7\twisted\test copying src\twisted\test\process_fds.py -> build\lib.win-amd64-3.7\twisted\test copying src\twisted\test\process_getargv.py -> build\lib.win-amd64-3.7\twisted\test copying src\twisted\test\process_getenv.py -> build\lib.win-amd64-3.7\twisted\test copying src\twisted\test\process_linger.py -> build\lib.win-amd64-3.7\twisted\test

python析构函数__del__的行为

python类的 ``` __del__() ``` 函数在执行之前发生了什么? 我想在类的析构函数中保存数据,以防成员函数出现异常数据没有保存,现在我在析构函数中调用open()函数会出现错误 ![图片说明](https://img-ask.csdn.net/upload/201912/23/1577090140_794739.jpg) 是什么原理,python在执行del前就已经释放了一些资源么?

python中的编码与字典中的编码,迷惑不解

``` IPython 5.4.1 -- An enhanced Interactive Python. ? -> Introduction and overview of IPython's features. %quickref -> Quick reference. help -> Python's own help system. object? -> Details about 'object', use 'object??' for extra details. In [1]: a = {1: '我爱吃鱼'} In [2]: a Out[2]: {1: '\xe6\x88\x91\xe7\x88\xb1\xe5\x90\x83\xe9\xb1\xbc'} In [3]: a[1] Out[3]: '\xe6\x88\x91\xe7\x88\xb1\xe5\x90\x83\xe9\xb1\xbc' In [4]: print a[1] 我爱吃鱼 In [5]: b = {1: u'我爱吃鱼'} In [6]: b Out[6]: {1: u'\u6211\u7231\u5403\u9c7c'} In [7]: print(b[1]) 我爱吃鱼 In [8]: ``` python2.7使用ipython编辑,为什么字典中的汉字是ascii码,unicode进行存储,而打印出来就不一样呢?大神解释一下上述过程。

Python 编写以文件名为输入参数,可在文件中提取作者名字的函数

Python初学者,这是最近看的《Python编程实践》中dict和set那一章的课后题,实在是解决不了,也没搜索到其他的经验贴,希望各位大神指教下,以下是题目: PDB文件格式常常用于存储有关分子的信息。一个PDB文件中可能含有零个或多个以单词AUTHOR(可能全大写,也可能全小写,还可能大小写混排)开始的行,然后是一些空格或者制表符,再然后是创建该文件的人的姓名。编写一个函数,以一个**文件名列表**为输入参数,在这些文件中找出所有的作者姓名,并以集合的形式返回

关于python3.5中的bytes-like object和str

最近学scrapy爬虫的时候,用CsvItemExporter将Item写入csv文件时,报错 ``` TypeError: write() argument must be str, not bytes ``` 代码如下: ``` class StockPipelineCSV(object): def open_spider(self,spider): self.file = open('stocks_01.csv', 'w') self.exporter = CsvItemExporter(self.file) self.exporter.start_exporting() def close_spider(self,spider): self.exporter.finish_exporting() self.file.close() def process_item(self, item, spider): self.exporter.export_item(item) return item ``` 然后找到exporters的CsvItemExporter类中的export_item()函数以及其他相关函数: ``` #exporters.py def export_item(self, item): if self._headers_not_written: self._headers_not_written = False self._write_headers_and_set_fields_to_export(item) fields = self._get_serialized_fields(item, default_value='', include_empty=True) values = list(self._build_row(x for _, x in fields)) self.csv_writer.writerow(values) def _build_row(self, values): for s in values: try: yield to_native_str(s, self.encoding) except TypeError: yield s ``` ``` #python.py def to_native_str(text, encoding=None, errors='strict'): """ Return str representation of `text` (bytes in Python 2.x and unicode in Python 3.x). """ if six.PY2: return to_bytes(text, encoding, errors) else: return to_unicode(text, encoding, errors) ``` 发现这里没问题已经将item转换成存放str对象的一个list了,不知道问题究竟出在哪里?scrapy是初学,不知道是不是scrapy的itempipeline.py代码的问题? 网上查了半天说是要用w+b二进制方式打开,这样确实不会报错了,但写进去之后是乱码,顺序也随机(这个可能是我settings.py里没有设置) 然后我自己写了小程序测试,自己open一个csv文件,以w+b打开 ``` # coding: utf-8 import csv csvfile = open('D://t.csv', 'w+b') writer = csv.writer(csvfile) writer.writerow([str.encode('列1'), str.encode('列2'), str.encode('列3')]) data = [ str.encode('值1'), str.encode('值2'), str.encode('值3') ] writer.writerow(data) csvfile.close() ``` 结果报错: ``` TypeError: a bytes-like object is required, not 'str' ``` 但我明明把他转换成bytes了啊。最后换了一种方式,去掉str.encode(),用w方式写入,正常了。但对bytes-like object和str者二者很困惑,不理解之前的方式为什么会报错。

解开python dict对象

<div class="post-text" itemprop="text"> <p>I have some data stored in Redis which is saved by python app by pickling the data. So basically this is a pickled python dict object. I want to get this stored data in golang. I found a library : <a href="https://godoc.org/github.com/hydrogen18/stalecucumber" rel="nofollow noreferrer">https://godoc.org/github.com/hydrogen18/stalecucumber</a></p> <p>But when I try some basic example to do unpickling its giving errors like:</p> <pre><code>string:Pickle Machine failed on opcode:0x62. Stack size:0. Memo size:0. Cause:Stack is too small to perform requested operation string:Pickle Machine failed on opcode:0x5c. Stack size:0. Memo size:0. Cause:Opcode is invalid </code></pre> <p>For more clarification refer example given below.</p> <ul> <li><code>Data = pickle.dumps({"apple":1,"banana":2,"cat":"hello","Dog":42.0})</code> #python pickling</li> <li>Pickled data = <code>b'\x80\x03}q\x00(X\x05\x00\x00\x00appleq\x01K\x01X\x06\x00\x00\x00bananaq\x02K\x02X\x03\x00\x00\x00catq\x03X\x05\x00\x00\x00helloq\x04X\x03\x00\x00\x00Dogq\x05G@E\x00\x00\x00\x00\x00\x00u.'</code></li> </ul> <p>My try to unpickle in Go:</p> <pre><code>package main import ( "fmt" "stalecucumber" "io" "os" ) func main() { var pickledDict io.Reader var err error pickledDict, err = os.Open("file.txt") fmt.Println(pickledDict) mystruct := struct{ Apple int Banana uint Cat string Dog float32 }{} err = stalecucumber.UnpackInto(&amp;mystruct).From(stalecucumber.Unpickle(pickledDict)) if err != nil { fmt.Println(err) } fmt.Println(mystruct) } </code></pre> <p>Getting Error: </p> <pre><code>Pickle Machine failed on opcode:0x62. Stack size:0. Memo size:0. Cause:Stack is too small to perform requested operation {0 0 0} </code></pre> </div>

Python的类继承dict、list、set之后,该类的类方法怎么获取它的长度

Python的类继承dict、list、set之后,该类的类方法怎么获取它的长度? ``` class Account(list): def __init__(self, account): list.__init__([]) self.append(account) def getlen1(self): print(len(self)) @classmethod def getlen2(cls): print(len(cls)) if __name__ == '__main__': a = Account(['jone', 27, '36']) a.getlen1() a.getlen2() ``` 执行方法2会报错: ![图片说明](https://img-ask.csdn.net/upload/201712/25/1514211238_800890.png)

大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了

大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...

在中国程序员是青春饭吗?

今年,我也32了 ,为了不给大家误导,咨询了猎头、圈内好友,以及年过35岁的几位老程序员……舍了老脸去揭人家伤疤……希望能给大家以帮助,记得帮我点赞哦。 目录: 你以为的人生 一次又一次的伤害 猎头界的真相 如何应对互联网行业的「中年危机」 一、你以为的人生 刚入行时,拿着傲人的工资,想着好好干,以为我们的人生是这样的: 等真到了那一天,你会发现,你的人生很可能是这样的: ...

程序员请照顾好自己,周末病魔差点一套带走我。

程序员在一个周末的时间,得了重病,差点当场去世,还好及时挽救回来了。

技术大佬:我去,你写的 switch 语句也太老土了吧

昨天早上通过远程的方式 review 了两名新来同事的代码,大部分代码都写得很漂亮,严谨的同时注释也很到位,这令我非常满意。但当我看到他们当中有一个人写的 switch 语句时,还是忍不住破口大骂:“我擦,小王,你丫写的 switch 语句也太老土了吧!” 来看看小王写的代码吧,看完不要骂我装逼啊。 private static String createPlayer(PlayerTypes p...

和黑客斗争的 6 天!

互联网公司工作,很难避免不和黑客们打交道,我呆过的两家互联网公司,几乎每月每天每分钟都有黑客在公司网站上扫描。有的是寻找 Sql 注入的缺口,有的是寻找线上服务器可能存在的漏洞,大部分都...

点沙成金:英特尔芯片制造全过程揭密

“亚马逊丛林里的蝴蝶扇动几下翅膀就可能引起两周后美国德州的一次飓风……” 这句人人皆知的话最初用来描述非线性系统中微小参数的变化所引起的系统极大变化。 而在更长的时间尺度内,我们所生活的这个世界就是这样一个异常复杂的非线性系统…… 水泥、穹顶、透视——关于时间与技艺的蝴蝶效应 公元前3000年,古埃及人将尼罗河中挖出的泥浆与纳特龙盐湖中的矿物盐混合,再掺入煅烧石灰石制成的石灰,由此得来了人...

讲一个程序员如何副业月赚三万的真实故事

loonggg读完需要3分钟速读仅需 1 分钟大家好,我是你们的校长。我之前讲过,这年头,只要肯动脑,肯行动,程序员凭借自己的技术,赚钱的方式还是有很多种的。仅仅靠在公司出卖自己的劳动时...

上班一个月,后悔当初着急入职的选择了

最近有个老铁,告诉我说,上班一个月,后悔当初着急入职现在公司了。他之前在美图做手机研发,今年美图那边今年也有一波组织优化调整,他是其中一个,在协商离职后,当时捉急找工作上班,因为有房贷供着,不能没有收入来源。所以匆忙选了一家公司,实际上是一个大型外包公司,主要派遣给其他手机厂商做外包项目。**当时承诺待遇还不错,所以就立马入职去上班了。但是后面入职后,发现薪酬待遇这块并不是HR所说那样,那个HR自...

女程序员,为什么比男程序员少???

昨天看到一档综艺节目,讨论了两个话题:(1)中国学生的数学成绩,平均下来看,会比国外好?为什么?(2)男生的数学成绩,平均下来看,会比女生好?为什么?同时,我又联想到了一个技术圈经常讨...

副业收入是我做程序媛的3倍,工作外的B面人生是怎样的?

提到“程序员”,多数人脑海里首先想到的大约是:为人木讷、薪水超高、工作枯燥…… 然而,当离开工作岗位,撕去层层标签,脱下“程序员”这身外套,有的人生动又有趣,马上展现出了完全不同的A/B面人生! 不论是简单的爱好,还是正经的副业,他们都干得同样出色。偶尔,还能和程序员的特质结合,产生奇妙的“化学反应”。 @Charlotte:平日素颜示人,周末美妆博主 大家都以为程序媛也个个不修边幅,但我们也许...

MySQL数据库面试题(2020最新版)

文章目录数据库基础知识为什么要使用数据库什么是SQL?什么是MySQL?数据库三大范式是什么mysql有关权限的表都有哪几个MySQL的binlog有有几种录入格式?分别有什么区别?数据类型mysql有哪些数据类型引擎MySQL存储引擎MyISAM与InnoDB区别MyISAM索引与InnoDB索引的区别?InnoDB引擎的4大特性存储引擎选择索引什么是索引?索引有哪些优缺点?索引使用场景(重点)...

如果你是老板,你会不会踢了这样的员工?

有个好朋友ZS,是技术总监,昨天问我:“有一个老下属,跟了我很多年,做事勤勤恳恳,主动性也很好。但随着公司的发展,他的进步速度,跟不上团队的步伐了,有点...

我入职阿里后,才知道原来简历这么写

私下里,有不少读者问我:“二哥,如何才能写出一份专业的技术简历呢?我总感觉自己写的简历太烂了,所以投了无数份,都石沉大海了。”说实话,我自己好多年没有写过简历了,但我认识的一个同行,他在阿里,给我说了一些他当年写简历的方法论,我感觉太牛逼了,实在是忍不住,就分享了出来,希望能够帮助到你。 01、简历的本质 作为简历的撰写者,你必须要搞清楚一点,简历的本质是什么,它就是为了来销售你的价值主张的。往深...

我说我不会算法,阿里把我挂了。

不说了,字节跳动也反手把我挂了。

优雅的替换if-else语句

场景 日常开发,if-else语句写的不少吧??当逻辑分支非常多的时候,if-else套了一层又一层,虽然业务功能倒是实现了,但是看起来是真的很不优雅,尤其是对于我这种有强迫症的程序"猿",看到这么多if-else,脑袋瓜子就嗡嗡的,总想着解锁新姿势:干掉过多的if-else!!!本文将介绍三板斧手段: 优先判断条件,条件不满足的,逻辑及时中断返回; 采用策略模式+工厂模式; 结合注解,锦...

离职半年了,老东家又发 offer,回不回?

有小伙伴问松哥这个问题,他在上海某公司,在离职了几个月后,前公司的领导联系到他,希望他能够返聘回去,他很纠结要不要回去? 俗话说好马不吃回头草,但是这个小伙伴既然感到纠结了,我觉得至少说明了两个问题:1.曾经的公司还不错;2.现在的日子也不是很如意。否则应该就不会纠结了。 老实说,松哥之前也有过类似的经历,今天就来和小伙伴们聊聊回头草到底吃不吃。 首先一个基本观点,就是离职了也没必要和老东家弄的苦...

为什么你不想学习?只想玩?人是如何一步一步废掉的

不知道是不是只有我这样子,还是你们也有过类似的经历。 上学的时候总有很多光辉历史,学年名列前茅,或者单科目大佬,但是虽然慢慢地长大了,你开始懈怠了,开始废掉了。。。 什么?你说不知道具体的情况是怎么样的? 我来告诉你: 你常常潜意识里或者心理觉得,自己真正的生活或者奋斗还没有开始。总是幻想着自己还拥有大把时间,还有无限的可能,自己还能逆风翻盘,只不是自己还没开始罢了,自己以后肯定会变得特别厉害...

男生更看重女生的身材脸蛋,还是思想?

往往,我们看不进去大段大段的逻辑。深刻的哲理,往往短而精悍,一阵见血。问:产品经理挺漂亮的,有点心动,但不知道合不合得来。男生更看重女生的身材脸蛋,还是...

为什么程序员做外包会被瞧不起?

二哥,有个事想询问下您的意见,您觉得应届生值得去外包吗?公司虽然挺大的,中xx,但待遇感觉挺低,马上要报到,挺纠结的。

当HR压你价,说你只值7K,你该怎么回答?

当HR压你价,说你只值7K时,你可以流畅地回答,记住,是流畅,不能犹豫。 礼貌地说:“7K是吗?了解了。嗯~其实我对贵司的面试官印象很好。只不过,现在我的手头上已经有一份11K的offer。来面试,主要也是自己对贵司挺有兴趣的,所以过来看看……”(未完) 这段话主要是陪HR互诈的同时,从公司兴趣,公司职员印象上,都给予对方正面的肯定,既能提升HR的好感度,又能让谈判气氛融洽,为后面的发挥留足空间。...

面试:第十六章:Java中级开发(16k)

HashMap底层实现原理,红黑树,B+树,B树的结构原理 Spring的AOP和IOC是什么?它们常见的使用场景有哪些?Spring事务,事务的属性,传播行为,数据库隔离级别 Spring和SpringMVC,MyBatis以及SpringBoot的注解分别有哪些?SpringMVC的工作原理,SpringBoot框架的优点,MyBatis框架的优点 SpringCould组件有哪些,他们...

面试阿里p7,被按在地上摩擦,鬼知道我经历了什么?

面试阿里p7被问到的问题(当时我只知道第一个):@Conditional是做什么的?@Conditional多个条件是什么逻辑关系?条件判断在什么时候执...

你打算用Java 8一辈子都不打算升级到Java 14,真香

我们程序员应该抱着尝鲜、猎奇的心态,否则就容易固步自封,技术停滞不前。

无代码时代来临,程序员如何保住饭碗?

编程语言层出不穷,从最初的机器语言到如今2500种以上的高级语言,程序员们大呼“学到头秃”。程序员一边面临编程语言不断推陈出新,一边面临由于许多代码已存在,程序员编写新应用程序时存在重复“搬砖”的现象。 无代码/低代码编程应运而生。无代码/低代码是一种创建应用的方法,它可以让开发者使用最少的编码知识来快速开发应用程序。开发者通过图形界面中,可视化建模来组装和配置应用程序。这样一来,开发者直...

面试了一个 31 岁程序员,让我有所触动,30岁以上的程序员该何去何从?

最近面试了一个31岁8年经验的程序猿,让我有点感慨,大龄程序猿该何去何从。

大三实习生,字节跳动面经分享,已拿Offer

说实话,自己的算法,我一个不会,太难了吧

程序员垃圾简历长什么样?

已经连续五年参加大厂校招、社招的技术面试工作,简历看的不下于万份 这篇文章会用实例告诉你,什么是差的程序员简历! 疫情快要结束了,各个公司也都开始春招了,作为即将红遍大江南北的新晋UP主,那当然要为小伙伴们做点事(手动狗头)。 就在公众号里公开征简历,义务帮大家看,并一一点评。《启舰:春招在即,义务帮大家看看简历吧》 一石激起千层浪,三天收到两百多封简历。 花光了两个星期的所有空闲时...

《经典算法案例》01-08:如何使用质数设计扫雷(Minesweeper)游戏

我们都玩过Windows操作系统中的经典游戏扫雷(Minesweeper),如果把质数当作一颗雷,那么,表格中红色的数字哪些是雷(质数)?您能找出多少个呢?文中用列表的方式罗列了10000以内的自然数、质数(素数),6的倍数等,方便大家观察质数的分布规律及特性,以便对算法求解有指导意义。另外,判断质数是初学算法,理解算法重要性的一个非常好的案例。

《Oracle Java SE编程自学与面试指南》最佳学习路线图(2020最新版)

正确选择比瞎努力更重要!

一文带你入门Java Stream流,太强了

两个星期以前,就有读者强烈要求我写一篇 Java Stream 流的文章,我说市面上不是已经有很多了吗,结果你猜他怎么说:“就想看你写的啊!”你看你看,多么苍白的喜欢啊。那就“勉为其难”写一篇吧,嘻嘻。 单从“Stream”这个单词上来看,它似乎和 java.io 包下的 InputStream 和 OutputStream 有些关系。实际上呢,没毛关系。Java 8 新增的 Stream 是为...

立即提问
相关内容推荐