V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  justou  ›  全部回复第 7 页 / 共 12 页
回复总数  239
1  2  3  4  5  6  7  8  9  10 ... 12  
2018-03-29 15:19:25 +08:00
回复了 Tianny 创建的主题 Python 问个如何优雅初始化类的问题
如果真的只有少量参数, 用第二种, 简单明了, IDE 里面的提示可以很清楚的看到有哪些参数要传, 最怕的是出现这种提示: func(*args, **kwargs), 丁点儿提示都没有呀! 除了翻文档还能干啥, 忘一次翻一次;

如果有大量参数, 怕是把一些相关的参数抽象到单独的类中更好哦(现在想想 matplotlib 的 api 用起来略烦人);

还有, "传个字典就可以了"这种想法要三思, 用在复杂系统中会直接导致程序逻辑不清晰, 重构困难(有时看到满屏的字典在飞就会想: 重构? 怕是重新撸一个更轻松哦), 稳健性超低, 改一个地方可能导致 N 个地方都要改, 字典当成纯粹的数据结构用就好了, OOP 还是多抽象跟封装.
2018-03-22 00:23:10 +08:00
回复了 chengluyu 创建的主题 C 问个 C++ 类初始化的问题。
在构造函数初始化列表中初始化吧(按照成员出现的顺序初始化); 要么提供一个新的值, 没给就默认用声明时给的初始值
http://en.cppreference.com/w/cpp/language/data_members
2018-03-09 16:50:41 +08:00
回复了 linxy19957 创建的主题 Python 关于 Python 和 C 之间相互调用的问题
Cython 里面可以写纯 C 代码, 释放 GIL 有直接语法支持:nogil, 当然 nogil 块里面不能有任何 Python 对象.

看你这难解难分的设计方法, Python/Cython/C 混编可能是最好的办法了. 个人经验来讲, 无论是 Python 调用 C, 还是 C 调用 Python, Cython 搭桥都是最简单直观的, 可以避免直接处理 Python C API, 这些 Cython 都帮你自动翻译好了.
2018-02-05 11:28:49 +08:00
回复了 zhouzhou113 创建的主题 C C++调用 gsl gsl_integration.h 积分
@innoink 他代码问题, 我猜测是 0.12194239 这个参数 →_→
2018-02-05 11:24:26 +08:00
回复了 zhouzhou113 创建的主题 C C++调用 gsl gsl_integration.h 积分
@innoink 把 void* cast 成 double*, 再解引用
2018-02-05 11:15:44 +08:00
回复了 zhouzhou113 创建的主题 C C++调用 gsl gsl_integration.h 积分
gsl_function 里 function 的签名必须是 double(double, void*)这样的一个纯 C 函数, 不是任何 C++特有的对象.

struct gsl_function_struct
{
double (* function) (double x, void * params);
void * params;
};

typedef struct gsl_function_struct gsl_function ;

毕竟 gsl 是个 C 库
2018-01-31 22:07:31 +08:00
回复了 XIVN1987 创建的主题 Python PyQt 编程中多线程应该用 QThread、QTimer 还是 threading??
@wwqgtxx "大量数据"要看具体类型, 数值数据用 list 存储是极其低效的, 可以用标准库的 array 或 numpy 存储, 想要避开 GIL 处理字符串可以在 Cython 中直接使用 C++的容器(string, vector, map 等, http://docs.cython.org/en/latest/src/userguide/wrapping_CPlusPlus.html ). array 和 numpy 也可以很容易把底层指针暴露给 C++处理

没实际用过 boost python, 感觉不如 Cython 简便直观, 有空深入学习下. 要拆分出来应该很容易, 只需要单独编译 boost python 库就行了 http://www.boost.org/doc/libs/1_66_0/libs/python/doc/html/building/installing_boost_python_on_your_.html
2018-01-31 19:17:51 +08:00
回复了 XIVN1987 创建的主题 Python PyQt 编程中多线程应该用 QThread、QTimer 还是 threading??
@wwqgtxx 为什么有这种需求呢?
2018-01-31 18:23:24 +08:00
回复了 XIVN1987 创建的主题 Python PyQt 编程中多线程应该用 QThread、QTimer 还是 threading??
@XIVN1987 如果是要在 PyQt 程序中进行密集计算的话, 我会用一个 QThread 来管理一些进程, 或者干脆把密集计算部分用 C++来实现; 如果线程只是进行 IO 操作的话, PyQt 的 QThread 和 C++的 QThread 跑起来感觉不到任何差别, 甚至可以利用协程, 这比 C++的 QThread 有更好的并发.

用 QThread 不用 Timer 很大程度上是从设计上考虑, 用 QThread 可以形成更好的程序结构. 用 QThread 当线程 /进程管理者, 负责跟界面的交互, 而不是生成一堆 QThread 去完成具体的任务
2018-01-31 17:30:06 +08:00
回复了 XIVN1987 创建的主题 Python PyQt 编程中多线程应该用 QThread、QTimer 还是 threading??
用 QTimer 来完成复杂任务避免 GUI 堵塞是一种摒弃的做法了, 一点都不 OOP, 随着任务变多变复杂整个代码只会变得一团糟. 在两种情形下用过 QTimer: 1) GUI 初始化时, 用 QTimer.singleShot(0, load_data)来加载数据避免界面半天不出来, 2) 纯定时器.

对于 1), 如果预处理比较复杂, 我宁愿放到单独的预处理线程, 界面只用于数据输入, 数据展示, 处理信号 /事件. 这样界面就很流畅

This is the traditional way of implementing heavy work in GUI applications, but as multithreading is nowadays becoming available on more and more platforms, we expect that zero-millisecond QTimer objects will gradually be replaced by QThreads.

http://doc.qt.io/qt-5/qtimer.html

另外, 线程中有 sleep 的代码充满着坏味道
2018-01-31 15:46:36 +08:00
回复了 XIVN1987 创建的主题 Python PyQt 编程中多线程应该用 QThread、QTimer 还是 threading??
QThread 的最大作用是可以发送信号, 利用信号-槽机制可以方便的与 GUI 跨线程交互, 从这个方面来抉择使用哪种线程,
用一个 QThread 来管理一堆 python 的线程或进程在 GUI 多线程编程中是一种比较方便的模式
调用 gsl_set_error_handler_off()关闭默认的错误处理, 自己处理返回值, 这儿有个例子 https://www.gnu.org/software/gsl/doc/html/err.html#examples, 先仔细研究下文档

gsl 源码 github 上有
github 上有 scipy 源码;

不必重新造轮子, GSL 很好用 https://www.gnu.org/software/gsl/doc/html/integration.html ;

C++调 Python 模块太慢, 且受制于 gil, 通常都是用 C/C++来加速 Python
这样说明是不是很容易理解?

import sys, locale
fh = open("f.txt", "w", encoding="utf-8") # 换成"gbk", "big5"等其它编码试试
sys.stdout = fh
print(sys.stdout.encoding, sys.getdefaultencoding(), locale.getpreferredencoding())
print('你好,世界')
fh.close()
int* 加 1 后是移动了 sizeof(int)个字节了
说说我从 python 深入下去的思路: Python → Cython → C → C++

Python:
各种入门级书籍, 官方文档教程→The Python3 Standard Library by Example(新出的) /Python Cookbook /Fluent Python

Cython:
官方文档 → Learning Cython Programming/Cython A Guide for Python Programmers

C:
kenneth A Reek, Pointers on C(C 与指针) → Expert C Programming: Deep C Secrets(C 专家编程) → C Traps and Pitfalls(C 陷阱与缺陷) 这三部曲都有影印版

(这时候可以开始读 Python 源码了, 有一本叫<python 源码剖析>的书很值得参考, 虽然比较老,好像是剖析的 py2.5)

C++:
C++ Primer(写得有点啰嗦, 以前我用这个入门的, 应该还有更好的) → The C++ Standard Library: A tutorial and reference(2nd) → C++ Templates The Complete Guide(2nd)(最近才出的 2, 详述了 C++11/C++14/C++17 的模板特性) → Effective Modern C++ , Optimized C++ , Clean C++ 等各种修炼 c++内功的, C++ Concurrency in Action 专门讲多线程编程的...

-----------------------------------------------------------

以上仅仅是从编程语言方面的思路, 个人觉得学习曲线没那么陡, 但是比较长---看似比较长, 但有一定积累后可以接收得很快, 虽然是在走上坡路, 但是积累的东西会让你做加速运动, 但在学的时候要多加实践多做笔记, 不然忘得飞快. 数据结构算法是必须的, 数据库网络,计算机系统, 操作系统,编译原理之类的根据自己的方向和需求去补充.

最后的编程技能就是 Python/Cython/C/C++的组合拳, 面对实际问题时可以施展得很开.

在学校的时候做计算物理, 用 Cython/C/C++加速 Python 用得挺多的, Python 很多时候是做数据的预处理, 以及一些不是计算密集型的数据处理(数据处理毕竟是 py 强项), 然后计算密集型的就用 Cython/C/C++完成(在 numpy/scipy 无法满足性能要求的情况下), 最后返回结果给 Python 后处理; 到公司后做图像算法, Python 常用来做一些给大家用的小工具(PyQt), 图像批处理, 算法测试, 差不多当脚本用了, 最后算法是用 C++写成 dll 给后端的 C#调用, 因为我不太懂 C#, 后端哥们儿又不太懂 C++, 对接起来很是尴尬, 最近我们准备组队一起刷 C++跟 C#
挺好找的, 我就是用 python 做数据科学出来的, 后来找了个 C++的算法攻城狮
2017-12-19 08:31:01 +08:00
回复了 wzw 创建的主题 Python Python 如何传递参数, 在子函数还能有智能提示(Auto Complete)[PyCharm]
自动过滤了 3 楼的评论么
2017-12-07 20:30:28 +08:00
回复了 DongDongXie 创建的主题 程序员 被 Python 编码搞蒙逼
纠结编码问题不要局限于 py2py3 了, 要系统的了解下字符串在计算机中的表示方式以及编码原理, 清楚了原理再结合具体语言到具体的环境去实践并加深理解, 不然即使熟悉了 python 处理编码的方式, 换了个环境又搞蒙了. 不搞清楚原理怎么治都只是治标不治本.
给出一些原理性的参考资料:
Computer Systems A Programmer ’ s Perspective: Chapter2, Representing and Manipulating
Information
http://unicodebook.readthedocs.io/
1  2  3  4  5  6  7  8  9  10 ... 12  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3875 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 22ms · UTC 05:09 · PVG 13:09 · LAX 21:09 · JFK 00:09
Developed with CodeLauncher
♥ Do have faith in what you're doing.