gpt4 book ai didi

c# - 给 C# 程序员编写 Python 的建议

转载 作者:行者123 更新时间:2023-12-02 04:35:22 29 4
gpt4 key购买 nike

就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the help center为指导。




8年前关闭。




过去几年我主要从事 C# 开发,但最近开始做一些 Python(不是 Iron Python)。但我不确定我是否已经在精神上飞跃到 Python ......我有点觉得我正在尝试像在 C# 中那样做事。

关于如何充分利用 Python 的任何建议?

或者任何提示\技巧、需要了解的更多信息、需要注意的事项?

最佳答案

首先查看tgray'sLundström's建议。

然后,您可能想知道一些事情:

  • Python 是动态类型的,因此与 C# 不同,您不会
    检查类型,但行为。你可能想谷歌一下鸭子
    打字。这意味着您不必处理拳击和
    开箱。
  • Python 是完全面向对象的,但语法不是
    强制执行这个范式。你可以在不使用的情况下编写 Python
    “类(Class)”这个词。
  • Python 特色的 GUI 库无法与
    CS。查询 PyQt , GTK 或 wxPython图书馆。
  • Python 有很多你可能不熟悉的概念:
    列表推导式、生成器(C# 中确实存在“yield”,
    但用的不多)、装饰器、元类等。不要
    害怕;你可以在没有它们的情况下用 Python 编程。他们
    只是智能工具,不是强制性的。
  • 就像在 C# 中一样,Python 标准库非常庞大。总是
    遇到问题的时候看看。这是最
    可能有人已经解决了。
  • Python 使用 LATE 绑定(bind)和变量标签。太远了
    对于开始使用语言的人来说担心的早
    关于它,但请记住,有一天你会遇到一个
    带有似乎不合逻辑的变量的行为,你会
    必须检查。目前:

  • 请记住永远不要做以下事情:
    def myfunc(my_list=[]) :
    # bla

    相反:
    def myfunc(my_list=()) :
    my_list = list(my_list)

    你会很好的。这是有充分理由的,但是
    这不是重点:-)
  • Python 是跨平台的,享受在 Mac 上写作的乐趣,并且
    如果您愿意,可以在 Linux 上运行。
  • Python 没有提供复杂的 IDE(你得到了 IDLE :-))。
    如果您是 Visual Studio 的爱好者,请查看 Glade .这是
    不如 Visual Studio 先进,但还是不错的 RAD .
  • 如果你想用 Python 开发一些 Web 应用程序,
    请记住,Python 不是 .NET。您必须添加一个网络
    如果你想比较它的框架。我喜欢 Django .
  • Python 不需要庞大的 IDE 即可使用。 SciTE ,
    Notepad++ , IDLE , Kate , gedit ...
    轻量级编辑器真的够用了。
  • Python 使用空格和换行符强制缩进,
    你不能改变这一点。你应该避免使用标签
    缩进并选择空格。相当于
    空手镯{}是关键字“pass”。
  • Python 不强制执行私有(private)变量。你可以定义一个
    在开头使用“__”(两个下划线)的私有(private)变量
    变量名,但在一些棘手的情况下仍然可以绕过
    方式。 Python 通常假设程序员是成年人
    知道他们做什么和交流。
  • Python 使用迭代。很多。很多很多。所以
    itertools 模块是你最好的 friend 。
  • Python 没有内置的委托(delegate)。委托(delegate)模块是
    不是你想的。对于事件驱动的编程,使用
    GUI lib(或自己编写模式,不是这样
    难的)。
  • Python 有一个解释器:你几乎可以测试任何东西,
    活着。它应该始终在您的文本旁边运行
    编辑。 Python基础解释器不多,试试IPython
    好吃的东西。
  • Python 是自动记录的:在您自己的代码中使用文档字符串
    并在 python 解释器中使用“help()”咨询其他人

  • 模块基础:
  • sys:操纵系统功能
  • os:设置凭据、操作文件路径、重命名、递归文件遍历等
  • Shutil:批处理文件处理(如递归删除)
  • 回复:正则表达式
  • urllib 和 urllib2:HTTP 脚本,如下载、发布/获取请求等。
  • 日期时间:操作日期、时间和持续时间
  • 主题:你猜对了
  • zlib:压缩
  • 泡菜:序列化
  • xml:使用 SAX 或 DOM 解析/编写 XML

  • 有数百个模块。享受。

    在 Python 中做事的一些典型方法:

    循环:

    Python 编码人员大量使用相当于 foreach C#
    循环,并且比任何其他人更喜欢它:

    基本迭代:
    for item in collection:
    print str(item)

    “集合”可以是字符串、列表、元组……任何
    可迭代:定义 .next() 方法的任何对象。有
    Python 中有很多可迭代对象。例如:典型的 Python 习语
    读取文件:
    for line in open("/path/to/file") :
    print line

    for 循环的快捷方式称为“列表理解”。
    这是一种在一行中创建新迭代的方法:

    使用列表理解创建过滤列表:
    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)

    与上面相同,但值将即时生成
    在第一次迭代然后丢失。更多相关信息 here .

    普通for循环

    如果你想表达一个通常的 for 循环,你可以使用
    xrange() 函数。 for (int i = 0; i < 5; i++)变成:
    for i in xrange(0,5) :

    do while 等效

    Python 中没有“Do While”。我从未错过,但如果
    您必须使用此逻辑,请执行以下操作:
    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

    这就是为什么如果你想在迭代时获得一个索引,
    Python 编码人员使用以下习语(enumerate() 是一个
    标准功能):
    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

    还有更多。您可以将字典解压缩为
    命名变量,并使用 * 编写函数原型(prototype), **接受任意数量的参数。但它不是
    用得足够多,值得让这篇文章更长:-)。

    字符串格式:
    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

    逻辑检查:

    你可以检查你在 C# 中做的方式,但有“Pythonic”
    方式(更短,更清晰:-)):
    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)

    组合(在一行上打印所有包含大写“o”的单词):
    sentence = "It's a good day to write some code"
    print " ".join([word.upper() for word in sentence.split() if "o" in word])

    输出:“对某些代码很好”

    请求原谅比许可更容易

    Python 编码人员通常不会检查是否有可能。他们有点像查克·诺里斯。他们这样做。然后捕获异常。通常,您不会检查文件是否存在,而是尝试打开它,如果失败则回滚:
    try :
    f = open(file)
    except IOerror :
    print "no file here !"

    当然,Chuck Norris 从不使用异常,因为他从不失败。

    else 子句

    “Else”是 Python 中的一个用途广泛的世界。你会发现
    “if”之后的“else”,但也在“except”和“for”之后。
    for stuff in bunch :
    # Do things
    else :
    # This always happens unless you hit "break" in the loop

    这也适用于“while”循环,即使我们不使用它
    循环尽可能多。
       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#

    如果你很好奇,这里有一堆先进的快速和
    脏(但很好) Python snippets .

    关于c# - 给 C# 程序员编写 Python 的建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/683273/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com