Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#程序员编写Python的建议_C#_Python - Fatal编程技术网

C#程序员编写Python的建议

C#程序员编写Python的建议,c#,python,C#,Python,在过去的几年里,我主要从事C#开发,但最近开始做一些Python(不是Iron Python)。但我不确定我是否在思想上跳到了Python……我有点觉得我正在尝试做一些我在C#中会做的事情 关于如何充分利用Python,有什么建议吗 或者任何提示\窍门、需要了解的东西、需要注意的东西?如果你是一个通过采取小的渐进步骤来更好地学习一门新语言的人,那么我建议使用。否则,请使用regular,在您感觉掌握了Python之前,不要再进行C#编码。我建议您使用一个好的编辑器,这样您就不会被空白所困扰。为了

在过去的几年里,我主要从事C#开发,但最近开始做一些Python(不是Iron Python)。但我不确定我是否在思想上跳到了Python……我有点觉得我正在尝试做一些我在C#中会做的事情

关于如何充分利用Python,有什么建议吗


或者任何提示\窍门、需要了解的东西、需要注意的东西?

如果你是一个通过采取小的渐进步骤来更好地学习一门新语言的人,那么我建议使用。否则,请使用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#