Saya tidak yakin dengan judul apa untuk merenungkan pertanyaan ini dengan tepat, coding golf tampaknya cocok jika agak tidak spesifik.
Saya tahu sedikit pemahaman tentang python tetapi tampaknya sangat sulit untuk 'dibaca'. Cara saya melihatnya, pemahaman mungkin mencapai hal yang sama seperti kode berikut:
for i in range(10): if i == 9: print('i equals 9')
Kode ini jauh lebih mudah dibaca daripada bagaimana pemahaman saat ini bekerja tetapi saya perhatikan Anda tidak boleh memiliki dua ':' dalam satu baris ... ini membawa saya juga ...
pertanyaan saya:
Apakah ada cara agar saya bisa memasukkan contoh berikut ke dalam SATU BARIS.
try:
if sam[0] != 'harry':
print('hello', sam)
except:
pass
Sesuatu seperti ini akan bagus:
try: if sam[0] != 'harry': print('hellp', sam)
except:pass
Tapi sekali lagi saya menemukan konflik ':' Saya juga ingin tahu apakah ada cara untuk menjalankan try (atau sesuatu seperti itu) tanpa kecuali, tampaknya sama sekali tidak ada gunanya saya perlu memasukkan kecuali: lulus di sana. Ini adalah garis yang terbuang.
Terima kasih atas masukannya ... dan berikut ada smileynya : D
\n
s dan gunakan spasi untuk indentasi.Jawaban:
Sayangnya, apa yang Anda inginkan tidak dimungkinkan dengan Python (yang membuat Python hampir tidak berguna untuk program baris perintah satu baris). Bahkan penggunaan tanda kurung secara eksplisit tidak menghindari pengecualian sintaks. Anda bisa mendapatkan urutan pernyataan sederhana, dipisahkan dengan titik koma:
for i in range(10): print "foo"; print "bar"
Tetapi segera setelah Anda menambahkan konstruksi yang memperkenalkan blok indentasi (seperti
if
), Anda memerlukan jeda baris. Juga,for i in range(10): print "i equals 9" if i==9 else None
legal dan mungkin mendekati apa yang Anda inginkan.
Adapun
try ... except
hal: Ini akan sama sekali tidak berguna tanpa fileexcept
.try
mengatakan "Saya ingin menjalankan kode ini, tetapi mungkin muncul pengecualian". Jika Anda tidak peduli dengan pengecualian, tinggalkantry
. Tapi begitu Anda memasukkannya, Anda berkata "Saya ingin menangani kemungkinan pengecualian". Thepass
kemudian mengatakan Anda ingin tidak menanganinya secara khusus. Tetapi itu berarti kode Anda akan terus berjalan, yang tidak akan terjadi sebaliknya.sumber
try:
: Aturan sintaks Python tidak akan membiarkan Anda lolos dengan klausa "coba" tunggal tanpa disertai klausa "kecuali". Apa yang saya lakukan adalah membungkus fungsi coba-kecuali dalam sendiri, dan memanggil ini sebagai gantinya. Sukaif (checkint(s))...
dandef checkint(s): try: int(s)\nreturn True\nexcept: return False
.python -c "exec\"print 'A' \nfor i in 1,2,3: print i \""
Anda bisa menggunakan pernyataan exec built-in, misalnya:
exec("try: \n \t if sam[0] != 'harry': \n \t\t print('hello', sam) \nexcept: pass")
Dimana
\n
baris baru dan\t
digunakan sebagai lekukan (tab).Selain itu, Anda harus menghitung spasi yang Anda gunakan, sehingga indentasi Anda sama persis.
Namun, seperti yang telah dikatakan semua jawaban lain, ini tentu saja hanya digunakan ketika Anda benar - benar harus meletakkannya di satu baris.
exec
adalah pernyataan yang cukup berbahaya (terutama saat membangun aplikasi web) karena memungkinkan eksekusi kode Python arbitrer.sumber
exec("try: \n if sam[0] != 'harry': print('hello', sam) \nexcept: pass")
lebih bagus :)Ya, posting ini berusia 8 tahun, tetapi jika seseorang datang ke sini juga mencari jawaban: Anda sekarang dapat menggunakan titik koma. Namun, Anda tidak dapat menggunakan if / elif / else staments, for / while loop, dan Anda tidak dapat menentukan fungsi. Kegunaan utama ini adalah saat menggunakan modul yang diimpor di mana Anda tidak perlu mendefinisikan fungsi apa pun atau menggunakan pernyataan if / elif / else / for / while / loops.
Berikut adalah contoh yang mengambil artis sebuah lagu, nama lagu, dan mencari liriknya yang jenius:
import bs4, requests; song = input('Input artist then song name\n'); print(bs4.BeautifulSoup(requests.get(f'https://genius.com/{song.replace(" ", "-")}-lyrics').text,'html.parser').select('.lyrics')[0].text.strip())
sumber
Saya sarankan untuk tidak melakukan ini ...
Apa yang Anda gambarkan bukanlah pemahaman.
PEP 8 Style Guide untuk Python Kode , yang saya lakukan merekomendasikan, telah ini mengatakan pada pernyataan majemuk:
Berikut adalah contoh pemahaman untuk membedakannya:
>>> [i for i in xrange(10) if i == 9] [9]
sumber
Saya tidak memberi insentif ini, tetapi katakanlah Anda menggunakan baris perintah, Anda tidak memiliki apa-apa selain Python dan Anda benar-benar membutuhkan satu baris, Anda dapat melakukan ini:
python -c "$(echo -e "a='True'\nif a : print 1")"
Apa yang kami lakukan di sini adalah pemrosesan awal
\n
sebelum mengevaluasi kode Python.Itu sangat hacky! Jangan menulis kode seperti ini.
sumber
mungkin dengan "dan" atau "atau"
setelah salah perlu menulis "atau"
setelah benar-benar perlu menulis "dan"
Suka
n=0 def returnsfalse(): global n n=n+1 print ("false %d" % (n)) return False def returnstrue(): global n n=n+1 print ("true %d" % (n)) return True n=0 returnsfalse() or returnsfalse() or returnsfalse() or returnstrue() and returnsfalse()
hasil:
false 1 false 2 false 3 true 4 false 5
atau mungkin suka
(returnsfalse() or true) and (returnstrue() or true) and ...
sampai di sini dengan mencari di google "bagaimana menempatkan beberapa pernyataan dalam satu baris python", tidak menjawab pertanyaan secara langsung, mungkin orang lain membutuhkan ini.
sumber
Untuk
python -c
solusi yang berorientasi, dan asalkan Anda menggunakan shell Bash, ya Anda dapat memiliki sintaks satu baris sederhana seperti dalam contoh ini:Misalkan Anda ingin melakukan sesuatu seperti ini (sangat mirip dengan sampel Anda, termasuk
except: pass
instruksi):python -c "from __future__ import print_function\ntry: import numpy; print( numpy.get_include(), end='\n' )\nexcept:pass\n" OUTPUT_VARIABLE __numpy_path
Ini TIDAK akan berfungsi dan menghasilkan Kesalahan ini:
File "<string>", line 1 from __future__ import print_function\ntry: import numpy; print( numpy.get_include(), end='\n' )\nexcept:pass\n ^ SyntaxError: unexpected character after line continuation character `
Ini karena persaingan antara Bash dan Python Interpretation of
\n
escape sequence. Untuk mengatasi masalah ini, seseorang dapat menggunakan$'string'
sintaks Bash untuk memaksa\n
interpretasi Bash SEBELUM Python. Untuk membuat contoh lebih menantang saya menambahkanend=..\n..
spesifikasi Python yang khas dalam panggilan cetak Python: pada akhirnya Anda akan bisa mendapatkan\n
interpretasi KEDUA dari bash dan Python bekerja bersama, masing-masing pada bagian teks yang menjadi perhatian. Sehingga akhirnya solusi yang tepat adalah seperti ini:python -c $'from __future__ import print_function\ntry:\n import numpy;\n print( numpy.get_include(), end="\\n" )\n print( "Hello" )\nexcept:pass\n' OUTPUT_VARIABLE __numpy_path
Itu mengarah ke hasil bersih yang tepat tanpa kesalahan:
/Softs/anaconda/lib/python3.7/site-packages/numpy/core/include Hello
Catatan: ini seharusnya bekerja juga dengan
exec
solusi berorientasi, karena masalahnya masih sama (kompetisi interpreter Bash dan Python).Note2: seseorang dapat mengatasi masalah dengan mengganti beberapa
\n
oleh beberapa;
tetapi tidak akan bekerja kapan saja (tergantung pada konstruksi Python), sementara solusi saya memungkinkan untuk selalu "satu baris" setiap bagian dari program Python multi-baris klasik.Note3: tentu saja, ketika satu lapisan, seseorang harus selalu menjaga spasi dan lekukan Python, karena sebenarnya kami tidak hanya "satu lapisan" di sini, TETAPI melakukan pengelolaan campuran yang tepat dari
\n
urutan pelarian antara bash dan Python . Ini adalah bagaimana kita dapat menangani bagian manapun dari program Python multi-baris klasik. Contoh larutan juga menggambarkan hal ini.sumber
Anda mencampurkan banyak hal, yang membuat Anda sulit menjawab pertanyaan Anda. Jawaban singkatnya adalah: Sejauh yang saya tahu, apa yang ingin Anda lakukan tidak mungkin dilakukan dengan Python - untuk alasan yang bagus!
Jawaban yang lebih panjang adalah Anda harus membuat diri Anda lebih nyaman dengan Python, jika Anda ingin mengembangkan dengan Python. Pemahaman tidak sulit untuk dibaca. Anda mungkin tidak terbiasa membacanya, tetapi Anda harus terbiasa jika ingin menjadi pengembang Python. Jika ada bahasa yang lebih sesuai dengan kebutuhan Anda, pilih yang itu. Jika Anda memilih Python, bersiaplah untuk memecahkan masalah dengan cara pythonic. Tentu saja Anda bebas melawan Python, tetapi itu tidak akan menyenangkan! ;-)
Dan jika Anda memberi tahu kami apa masalah Anda yang sebenarnya, Anda bahkan mungkin mendapatkan jawaban pythonic. "Mendapatkan sesuatu dalam satu baris" biasanya bukan masalah pemrograman.
sumber
Aktualnya mungkin ;-)
# not pep8 compatible^ sam = ['Sam',] try: print('hello',sam) if sam[0] != 'harry' else rais except: pass
Anda dapat melakukan hal-hal yang sangat jelek dengan python seperti:
def o(s):return''.join([chr(ord(n)+(13if'Z'<n<'n'or'N'>n else-13))if n.isalpha()else n for n in s])
yang berfungsi untuk enkripsi rot13 / cesa dalam satu baris dengan 99 karakter.
sumber
Berikut ini contohnya:
untuk i dalam kisaran (80, 90): print (i, end = "") if (i! = 89) else print (i)
Keluaran: 80 81 82 83 84 85 86 87 88 89
sumber