C#程序员编写Python的建议
在过去的几年里,我主要从事C#开发,但最近开始做一些Python(不是Iron Python)。但我不确定我是否在思想上跳到了Python……我有点觉得我正在尝试做一些我在C#中会做的事情 关于如何充分利用Python,有什么建议吗C#程序员编写Python的建议,c#,python,C#,Python,在过去的几年里,我主要从事C#开发,但最近开始做一些Python(不是Iron Python)。但我不确定我是否在思想上跳到了Python……我有点觉得我正在尝试做一些我在C#中会做的事情 关于如何充分利用Python,有什么建议吗 或者任何提示\窍门、需要了解的东西、需要注意的东西?如果你是一个通过采取小的渐进步骤来更好地学习一门新语言的人,那么我建议使用。否则,请使用regular,在您感觉掌握了Python之前,不要再进行C#编码。我建议您使用一个好的编辑器,这样您就不会被空白所困扰。为了
或者任何提示\窍门、需要了解的东西、需要注意的东西?如果你是一个通过采取小的渐进步骤来更好地学习一门新语言的人,那么我建议使用。否则,请使用regular,在您感觉掌握了Python之前,不要再进行C#编码。我建议您使用一个好的编辑器,这样您就不会被空白所困扰。为了简单起见,我只使用ActivePython的包,其中包括一个编辑器和所有win32api库。如果你一直在使用C#,那么进入它们会非常有趣。Python中的win32api可以简单一点。你不需要做整件事。下载ActivePython(它随CPython一起提供),打开它,然后开始在控制台输入一些东西。使用C#后,您将相当容易地学会它。对于一些更有趣的Python花絮,请尝试一下,它有各种各样的方法,可以让您非常简单地看到使用Python可以做的不同事情。如果您不是编程新手,我推荐Mark Pilgrim的书。它以一种易于理解Python技术和习惯用法如何应用于构建实际应用程序的方式解释Python。从阅读开始 您可以在上面的链接中阅读它,也可以在Python提示符下键入
导入它。=)
充分利用C#不提供的Python功能
例如duck类型、元类、列表理解等*
编写简单的程序只是为了测试这些特性。你很快就会习惯(如果没有上瘾的话)
看一下
所以你不需要重新发明轮子。不要试图阅读全部内容,即使是快速浏览一下TOC也可以为你节省很多时间
*我知道C#已经有了其中的一些功能,但从我所看到的,它们要么是非常新的,要么不是C#开发者常用的。如果我错了,请纠正我。如果您还没有听说过,这是一个学习Python的好地方。它还有一系列的功能。
- 不要使用类。使用字典、集合、列表和元组
- 二传手和接球手是被禁止的
- 除非您真的需要,否则不要使用异常处理程序-让它以风格崩溃
- Pylint可以成为更多Python编码风格的朋友
- 准备好后-查看列表理解、生成器和lambda函数
如果你有编程经验,又不想花钱,我推荐你 首先,检查并提出建议
然后,你可能想知道一些事情:
- Python是动态类型的,因此与C#不同,您不会
检查类型,但检查行为。你可能想用谷歌搜索一下鸭子
打字。这意味着你不必处理拳击和拳击
拆箱
- Python是完全面向对象的,但语法不是
实施这一范式。您可以编写Python而无需使用
“阶级”一词
- Python的GUI库无法与之相比
C#s。检查、GTK或库
- Python有许多您可能不熟悉的概念:
列表理解,生成器(“收益率”在C#中确实存在,
但它并没有被广泛使用),装饰器、元类等都没有
害怕;您可以在不使用它们的情况下使用Python编程。他们
只是智能工具,不是强制性的
- 与C#一样,Python标准库非常庞大。总是
当你遇到任何问题时,请看它。这是最重要的
可能已经有人解决了
- Python使用后期绑定和变量标签。太远了
对于一个刚开始使用这种语言的人来说,担心还为时过早
但请记住,总有一天你会遇到
使用看似不合逻辑的变量的行为,您将
我必须检查一下。目前:
记住永远不要做以下事情:
def myfunc(my_list=[]) :
# bla
while True : # Yes, this is an infinite loop. Crazy, hu?
# Do your stuff
if condition :
break
相反:
def myfunc(my_list=()) :
my_list = list(my_list)
你会很好的。这有很好的理由,但是
这不是重点:-)
- Python是跨平台的,喜欢在Mac上编写,而且
如果愿意,可以在Linux上运行
- Python没有提供复杂的IDE(您得到:-)。
如果您是Visual Studio上瘾者,请检查。这是
虽然没有VisualStudio那么先进,但它仍然是一个很好的工具
- 如果您想用Python开发一些web应用程序,
请记住,Python不是.NET。你必须添加一个网页
如果您想比较,请将框架与它进行比较。我喜欢
- Python不需要庞大的IDE即可使用,
, , ...
轻量级编辑器已经足够了
- Python使用空格和换行符强制缩进,
你不能改变这一点。你应该避免使用标签来进行编辑
缩进并选择空格。相当于
空手镯{}是关键字“通过”
- Python不强制私有变量。您可以定义
private var在
变量名,但在某些复杂的情况下仍然可以绕过它
方式。Python通常假定程序员是成年人
他们知道自己在做什么和交流
- Python使用迭代。很多很多很多很多。因此
itertools模块是您最好的朋友
- Python没有内置的委托。委托模块是
不是你想的那样。对于事件驱动编程,请使用
GUI库(或者自己编写模式代码,不是这样的
困难的)
- Python有一个解释器:您几乎可以测试任何东西,
居住它应该总是在文本旁边运行
编辑Python基本解释器不多,试试看
为了好吃的东西
- Python是自动记录的:使用docstrings
for line in open("/path/to/file") :
print line
my_list = [item for item in collection if condition]
my_list = [int(item) * 3 for item in collection]
my_list = (int(item) * 3 for item in collection)
for i in xrange(0,5) :
while True : # Yes, this is an infinite loop. Crazy, hu?
# Do your stuff
if condition :
break
a, b = b, a
animal1, animal2, animal3, animal4 = ["cow", "dog", "bird", "fish"]
agenda = [("steve", "jobs"), ("linus", "torvald"), ("bill", "gates"),("jon", "skeet")]
for person in agenda:
print person[0], person[1]
agenda = [("steve", "jobs"), ("linus", "torvald"), ("bill", "gates"),("jon", "skeet")]
for name, lastname in agenda:
print name, lastname
for index, value in enumerate(sequence) :
print index, value
>>> foo(var1, var1, var3) :
print var1, var2
print var3
>>> seq = (3.14, 42, "yeah")
>>> foo(*seq)
3.14 42
yeah
print "This is a %s on %s about %s" % ("post", "stackoverflow", "python")
print "This is a %(subject)s on %(place)s about %(about)s" % {"subject" : "post", "place" : "stackoverflow", "about" : "python"}
print "blebla"[2:4] # Print "eb"
last = string[:-1] # Getting last element
even = (0,1,2,3,4,5,6,7,8,9)[::2] # Getting evens only (third argument is a step)
reversed = string[::-1] # Reversing a string
if 1 in (1, 2, 3, 4) : # Check en element is in a sequence
if var : # check is var is true. Var == false if it's False, 0, (), [], {} or None
if not var : # Contrary of above
if thing is var: # Check if "thing" and "var" label the same content.
if thing is None : # We use that one because None means nothing in Python (almost null)
sentence = "It's a good day to write some code"
print " ".join([word.upper() for word in sentence.split() if "o" in word])
try :
f = open(file)
except IOerror :
print "no file here !"
for stuff in bunch :
# Do things
else :
# This always happens unless you hit "break" in the loop
try :
# A crazy stuff
except ToCrazyError :
# This happens if the crazy stuff raises a ToCrazyError Exception
else :
# This will happen if there is no error so you can put only one line after the "try" clause
finally :
# The same as in C#