Pertanyaan Saran untuk programmer C # menulis Python [tertutup]


Saya sudah melakukan pengembangan C # selama beberapa tahun terakhir tetapi baru-baru ini mulai melakukan sedikit Python (bukan Iron Python). Tapi saya tidak yakin apakah saya telah membuat lompatan mental ke Python ... Saya merasa seperti sedang mencoba melakukan hal-hal seperti yang saya lakukan di C #.

Ada saran tentang bagaimana saya dapat sepenuhnya memanfaatkan Python?

Atau kiat-kiat apa saja, hal-hal untuk dipelajari lebih lanjut, hal-hal yang harus diperhatikan?


73
2018-03-25 20:18


asal


Jawaban:


Pertama, periksa tgray dan Lundstrom nasihat.

Kemudian, beberapa hal yang mungkin ingin Anda ketahui:

  • Python secara dinamis diketik, jadi tidak seperti C #, Anda tidak akan jenis cek, tetapi perilaku. Anda mungkin ingin google tentang bebek mengetik. Ini menyiratkan Anda tidak harus berurusan dengan tinju dan unboxing.

  • Python sepenuhnya berorientasi objek, tetapi sintaksnya tidak menegakkan paradigma ini. Anda dapat menulis Python tanpa menggunakan kata "kelas".

  • Perpustakaan GUI yang ditampilkan dengan Python tidak dapat dibandingkan C # 's. Memeriksa PyQt, GTK atau wxPython perpustakaan.

  • Python memiliki banyak konsep yang mungkin tidak Anda kenal: daftar comprehensions, generator ("hasil" memang ada di C #, tetapi tidak banyak digunakan), dekorator, metaclasses, dll. Jangan takut; Anda dapat memprogram dengan Python tanpa mereka. Mereka hanyalah alat pintar, bukan wajib.

  • Seperti di C #, pustaka standar Python sangat besar. Selalu Lihatlah ketika Anda menghadapi masalah apa pun. Itu kebanyakan kemungkinan seseorang sudah menyelesaikannya.

  • Python menggunakan LATE mengikat dan label variabel. Itu terlalu jauh awal untuk seseorang yang memulai dengan bahasa untuk khawatir tentang hal itu, tetapi ingat bahwa suatu hari Anda akan menghadapi perilaku dengan variabel yang SEEMS tidak logis, dan Anda akan harus memeriksanya. Untuk saat ini:

Ingatlah untuk tidak pernah melakukan hal berikut:

def myfunc(my_list=[]) :
   # bla

Sebagai gantinya:

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

Dan Anda akan baik-baik saja. Ada alasan bagus untuk itu, tapi itu bukan intinya :-)

  • Python adalah platform silang, menikmati menulis di Mac, dan jalankan di Linux, jika Anda mau.

  • Python tidak dilengkapi dengan IDE yang kompleks (Anda punya DIAM :-)). Jika Anda seorang pecandu Visual Studio, periksa Glade. Ini adalah tidak semaju Visual Studio, tapi masih bagus RAD.

  • Jika Anda ingin mengembangkan beberapa aplikasi web dengan Python, ingat bahwa Python tidak. NET. Anda harus menambahkan web kerangka untuk itu jika Anda ingin membandingkan. saya suka Django.

  • Python tidak membutuhkan IDE besar untuk bekerja dengannya. SciTE, Notepad ++, DIAM, Kate, gedit... Editor yang ringan benar-benar cukup.

  • Python memaksa indentasi menggunakan spasi dan jeda baris, Anda tidak dapat mengubahnya. Anda harus menghindari menggunakan tab untuk indentasi dan pilih spasi sebagai gantinya. Setara dengan gelang kosong {} adalah kata kunci "lulus".

  • Python tidak memaksakan variabel privat. Anda dapat menentukan var pribadi menggunakan "__" (dua garis bawah) di awal nama variabel, tetapi masih bisa dilewati dalam beberapa hal rumit cara. Python biasanya menganggap programmer adalah orang dewasa yang dewasa yang tahu apa yang mereka lakukan dan komunikasikan.

  • Python menggunakan iterasi. Banyak. Banyak sekali. Dan begitu modul itertools adalah teman terbaik Anda.

  • Python tidak memiliki delegasi bawaan. Modul delegasi adalah bukan apa yang kamu pikirkan. Untuk pemrograman yang digerakkan oleh kejadian, gunakan a GUI lib (atau kode pola sendiri, bukan itu sulit).

  • Python memiliki seorang penerjemah: Anda dapat menguji hampir semua hal, hidup. Itu harus selalu berjalan di sebelah teks Anda editor. Interpreter dasar Python tidak banyak, coba IPython untuk sesuatu yang enak.

  • Python adalah autodocumented: gunakan docstrings dalam kode Anda sendiri dan berkonsultasi dengan yang lain menggunakan "help ()" di interpreter python

Dasar-dasar modul:

  • sys: memanipulasi fitur sistem
  • os: atur kredensial, manipulasi path file, rename, file rekursif, dll
  • shutil: pemrosesan file batch (seperti penghapusan rekursif)
  • re: regexp
  • urllib dan urllib2: HTTP¨scripting seperti mengunduh, memposting / mendapatkan balasan, dll.
  • datetime: memanipulasi tanggal, waktu DAN DURASI
  • benang: Anda menebaknya
  • zlib: kompresi
  • acar: serialisasi
  • xml: parsing / Menulis XML dengan SAX atau DOM

Ada ratusan modul. Nikmati.

Beberapa cara umum untuk melakukan sesuatu dengan Python:

Loops:

Python coders menggunakan secara masif setara dengan foreach C # loop, dan lebih suka yang lain:

Iterasi dasar:

for item in collection:
    print str(item)

"koleksi" dapat berupa string, daftar, tuple ... Any iterable: setiap objek yang mendefinisikan metode .next (). Ada banyak iterables di Python. Misalnya: idiom Python tipikal untuk membaca file:

for line in open("/path/to/file") :
    print line

Pintasan ke for loop disebut "daftar pemahaman". Ini adalah cara untuk membuat iterable baru dalam satu baris:

Membuat daftar yang difilter dengan pemahaman daftar:

my_list = [item for item in collection if condition]

Membuat daftar baru dengan pemahaman daftar:

my_list = [int(item) * 3 for item in collection]

Membuat generator baru dengan pemahaman daftar:

my_list = (int(item) * 3 for item in collection)

Sama seperti di atas, tetapi nilai-nilai akan dihasilkan dengan cepat pada iterasi pertama kemudian hilang. Informasi lebih lanjut tentang itu sini.

Biasa untuk loop

Jika Anda ingin mengekspresikan loop biasa, Anda dapat menggunakan xrange () berfungsi. for (int i = 0; i < 5; i++) menjadi:

for i in xrange(0,5) :

lakukan saat setara

Tidak ada "Do While" dengan Python. Saya tidak pernah melewatkannya, tetapi jika Anda harus menggunakan logika ini, lakukan hal berikut:

while True : # Yes, this is an infinite loop. Crazy, hu?

  # Do your stuff

  if condition :
      break

Membongkar

Menukar variabel:

a, b = b, a

Beberapa tugas:

Di atas hanyalah hasil dari apa yang kita sebut "membongkar" (di sini diterapkan ke tuple). Cara sederhana untuk menjelaskannya adalah Anda dapat menetapkan setiap nilai dari setiap urutan secara langsung ke yang setara nomor variabel, dalam satu baris:

animal1, animal2, animal3, animal4 = ["cow", "dog", "bird", "fish"]

Ini memiliki banyak implikasi. Saat iterasi pada array multidimensi, Anda biasanya mendapatkan setiap sub urutan satu per satu kemudian gunakan, misalnya:

agenda = [("steve", "jobs"), ("linus", "torvald"), ("bill", "gates"),("jon", "skeet")]
for person in agenda:
    print person[0], person[1]

Tetapi dengan membongkar, Anda dapat menetapkan nilai secara langsung variabel juga:

agenda = [("steve", "jobs"), ("linus", "torvald"), ("bill", "gates"),("jon", "skeet")]
for name, lastname in agenda:
    print name, lastname

Dan itulah mengapa jika Anda ingin mendapatkan indeks saat iterasi, Python coders menggunakan idiom berikut (enumerate () adalah a fungsi standar):

for index, value in enumerate(sequence) :
    print index, value

Membongkar panggilan fungsi

Ini adalah penggunaan tingkat lanjut, dan Anda dapat melewatinya jika itu mengganggumu.

Anda dapat membongkar nilai menggunakan tanda "*" untuk menggunakan urutan langsung dalam panggilan fungsi. Misalnya:

>>> foo(var1, var1, var3) :
    print var1, var2
    print var3
>>> seq = (3.14, 42, "yeah")
>>> foo(*seq)
3.14 42
yeah

Bahkan ada lebih dari itu. Anda dapat membongkar kamus sebagai variabel bernama, dan menulis prototipe fungsi dengan *, ** untuk menerima sejumlah argumen acak. Tapi ternyata tidak cukup digunakan untuk membuat postingan ini lebih panjang :-).

Pemformatan string:

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"}

Mengiris iterable:

Anda bisa mendapatkan bagian apa pun dari iterable menggunakan sintaks yang sangat singkat:

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

Pemeriksaan logis:

Anda dapat memeriksa cara Anda melakukannya di C #, tetapi ada "Pythonic" cara (lebih pendek, lebih jelas :-)):

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)

Combo (cetak pada satu baris semua kata yang mengandung huruf "o" dalam huruf besar):

sentence = "It's a good day to write some code"
print " ".join([word.upper() for word in sentence.split() if "o" in word])

Output: "BAIK UNTUK BEBERAPA KODE"

Lebih mudah untuk meminta maaf daripada izin

Coders Python biasanya tidak memeriksa apakah sesuatu itu mungkin. Mereka sedikit mirip Chuck Norris. Mereka melakukannya. Lalu tangkap pengecualiannya. Biasanya, Anda tidak memeriksa apakah file ada, Anda mencoba untuk membukanya, dan memutar kembali jika gagal:

try :
    f = open(file)
except IOerror :
    print "no file here !"

Tentu saja Chuck Norris tidak pernah menggunakan pengecualian karena dia tidak pernah gagal.

Klausul lain

"Else" adalah dunia dengan banyak kegunaan dalam Python. Anda akan menemukan "lain" setelah "jika", tetapi setelah "kecuali" dan "untuk" juga.

for stuff in bunch :
    # Do things
else :
    # This always happens unless you hit "break" in the loop

Ini berfungsi untuk "while" loop juga, bahkan jika kita tidak menggunakan ini loop sebanyak mungkin.

   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#

Jika Anda penasaran, di sini adalah sekelompok cepat maju dan kotor (tapi bagus) Cuplikan Python.


151
2018-03-25 20:41



  • Menahan diri dari menggunakan kelas. Gunakan kamus, set, daftar, dan tupel.
  • Setter dan getter dilarang.
  • Tidak memiliki penangan pengecualian kecuali jika Anda benar-benar perlu - biarkan macet dalam gaya.
  • Pylint dapat menjadi teman Anda untuk gaya pengkodean pythonish yang lebih banyak.
  • Ketika Anda siap - periksa daftar pemahaman, generator dan fungsi lambda.

16
2018-03-25 20:38



Jika Anda tidak baru dalam pemrograman, saya akan merekomendasikan buku itu "Dive into Python" oleh Mark Pilgrim. Ini menjelaskan Python dengan cara yang membuatnya mudah untuk memahami bagaimana teknik dan idiom Python dapat diterapkan untuk membangun aplikasi praktis.


13
2018-03-25 20:38



Mulai dengan membaca Zen of Python

Anda bisa membacanya di tautan di atas, atau cukup mengetik import this pada prompt Python. =)

Manfaatkan fitur Python yang tidak ditawarkan * oleh C #

Seperti bebek-mengetik, metaclasses, daftar pemahaman, dll. *

Tulis program sederhana hanya untuk menguji fitur-fitur ini. Anda akan terbiasa (jika tidak kecanduan) kepada mereka dalam waktu singkat.

Lihatlah Pustaka Standar Python

Jadi Anda tidak menemukan kembali roda. Jangan mencoba untuk membaca semuanya, bahkan sekilas TOC dapat menghemat banyak waktu.


* Saya tahu C # sudah memiliki beberapa fitur ini, tetapi dari apa yang saya lihat mereka cukup baru atau tidak biasa digunakan oleh pengembang C #. Tolong benarkan saya jika saya salah.


6
2018-03-25 20:39



Jika Anda belum mendengar tentang itu, Dive Into Python adalah tempat yang bagus untuk memulai bagi siapa pun yang mempelajari Python. Ini juga memiliki banyak Tips dan Trik.


5
2018-03-25 20:23



Jika Anda adalah seseorang yang lebih baik belajar bahasa baru dengan mengambil langkah-langkah tambahan kecil maka saya akan merekomendasikan menggunakan IronPython. Kalau tidak gunakan biasa CPython dan jangan melakukan pengkodean C # lagi sampai Anda merasa seperti Anda memahami Python.


3
2018-03-25 20:26



Saya menyarankan Anda untuk mendapatkan editor yang bagus agar Anda tidak digigit oleh spasi. Untuk kesederhanaan, saya hanya menggunakan paket ActivePython Link, yang mencakup editor dan semua pustaka win32api. Mereka cukup menyenangkan jika Anda menggunakan C #. Win32api dengan Python dapat menjadi sedikit lebih sederhana. Anda tidak perlu melakukan seluruh hal DDLImport. Unduh ActivePython (yang dilengkapi dengan CPython), buka, dan mulai memasukkan beberapa barang di konsol. Anda akan mengambilnya cukup mudah setelah menggunakan C #. Untuk beberapa triptit Python yang lebih menarik, cobalah Kode ActiveState, yang memiliki segala macam resep, yang dapat memungkinkan Anda untuk hanya melihat berbagai hal yang dapat Anda lakukan dengan Python.


2
2018-03-26 18:53



Saya juga cukup banyak dalam sepatu Anda, masih menggunakan C # untuk sebagian besar pekerjaan saya, tetapi menggunakan Python semakin banyak untuk proyek lainnya.

@ e-satis mungkin tahu Python dalam-keluar dan semua sarannya adalah yang terbaik. Dari sudut pandang saya apa yang membuat perbedaan terbesar bagi saya adalah sebagai berikut:

Dapatkan kembali menjadi fungsional. belum tentu kode spaghetti, tetapi belajar bahwa tidak semuanya harus berada dalam objek, juga tidak seharusnya.

Penerjemah. Ini seperti jendela langsung kecuali 10 ^ 10 lebih baik. Karena cara kerja Python, Anda tidak memerlukan semua bagasi dan omong kosong C # yang Anda masukkan sebelum Anda dapat menjalankan berbagai hal; Anda bisa mendera dalam beberapa baris dan melihat bagaimana hal-hal bekerja.

Saya biasanya mendapatkan contoh IDLE di mana saya hanya melempar sekitar cuplikan saat saya mengerjakan bagaimana berbagai bit dalam bahasa bekerja saat saya mengedit file saya ... mis. sibuk bekerja bagaimana melakukan panggilan peta pada daftar, tapi saya tidak 100% pada lambda yang harus saya gunakan ... mendera beberapa baris ke IDLE, melihat cara kerjanya dan apa yang dilakukannya.

Dan akhirnya, mencintai ke dalam verbositas Python, dan saya tidak bermaksud bahwa dalam arti panjang dari kata kerja, tetapi seperti yang ditunjukkan oleh e-satis, menggunakan kata kerja seperti "dalam", "adalah", "untuk", dll.

Jika Anda melakukan banyak pekerjaan refleksi di C # Anda akan merasa ingin menangis ketika Anda melihat betapa sederhananya hal yang sama dalam Python.

Semoga beruntung dengan itu.


2
2018-03-25 21:02



Jika Anda memiliki pengalaman pemrograman dan tidak ingin menghabiskan uang saya akan merekomendasikan Bagaimana Berpikir Seperti Ilmuwan Komputer dengan Python.


1
2018-03-26 14:31



Dan kemudian sesuatu yang bisa Anda manfaatkan:

IPython shell: Penyelesaian otomatis di shell. Itu melakukan operasi batch, menambahkan banyak fitur, penebangan dan semacamnya. >>> Mainkan dengan shell - selalu!

easy_install / pip: Sangat bagus dan cara mudah untuk menginstal aplikasi Python pihak ke-3.


0