Saya memiliki kode berikut
num1 = 10
someBoolValue = True
Saya perlu mengatur nilai num1
untuk 20
jika someBoolValue
adalah True
; dan tidak melakukan hal lain. Jadi, inilah kode saya untuk itu
num1 = 20 if someBoolValue else num1
Adakah cara agar saya bisa menghindari ...else num1
bagian tersebut agar terlihat lebih bersih? Setara dengan
if someBoolValue:
num1 = 20
Aku mencoba menggantinya dengan ...else pass
seperti ini: num1=20 if someBoolValue else pass
. Yang saya dapatkan hanyalah kesalahan sintaks. Aku juga tidak bisa mengabaikan ...else num1
bagian itu.
python
if-statement
bdhar
sumber
sumber
num1 = 20 if someBoolValue else 10
. Lalu Anda menyimpannum1=10
garis juga?num1
sudah ada ...Jawaban:
Saya tidak berpikir ini mungkin dengan Python, karena apa yang sebenarnya Anda coba lakukan mungkin diperluas menjadi sesuatu seperti ini:
num1 = 20 if someBoolValue else num1
Jika Anda mengecualikan
else num1
, Anda akan menerima kesalahan sintaks karena saya yakin tugas tersebut pasti mengembalikan sesuatu.Seperti yang telah disebutkan orang lain, Anda dapat melakukan ini, tetapi itu buruk karena Anda mungkin akan membingungkan diri sendiri saat membaca kode itu di lain waktu:
if someBoolValue: num1=20
Saya bukan penggemar berat
num1 = someBoolValue and 20 or num1
karena alasan yang sama. Saya harus benar-benar berpikir dua kali tentang apa yang dilakukan baris itu.Cara terbaik untuk benar-benar mencapai apa yang ingin Anda lakukan adalah versi aslinya:
if someBoolValue: num1 = 20
Alasan mengapa verison terbaik adalah karena sangat jelas apa yang ingin Anda lakukan, dan Anda tidak akan bingung, atau siapa pun yang akan menghubungi kode itu nanti.
Juga, sebagai catatan tambahan,
num1 = 20 if someBoolValue
adalah kode Ruby yang valid, karena Ruby bekerja sedikit berbeda.sumber
num1 = (20 if someBoolValue else num1)
.Gunakan ini:
num1 = 20 if someBoolValue else num1
sumber
Dalam satu baris:
if someBoolValue: num1 = 20
Tapi jangan lakukan itu. Gaya ini biasanya tidak diharapkan. Orang lebih suka bentuk yang lebih panjang untuk kejelasan dan konsistensi.
if someBoolValue: num1 = 20
(Sama halnya, topi unta harus dihindari. Jadi sebaiknya gunakan
some_bool_value
.)Perhatikan bahwa ekspresi sebaris
some_value if predicate
tanpaelse
bagian tidak ada karena tidak akan ada nilai yang dikembalikan jika predikatnya salah. Namun, ekspresi harus memiliki nilai hasil yang ditentukan dengan jelas dalam semua kasus. Ini berbeda dari penggunaan seperti di, katakanlah, Ruby atau Perl.sumber
Anda dapat menggunakan salah satu dari berikut ini:
(falseVal, trueVal)[TEST] TEST and trueVal or falseVal
sumber
True
/False
, karenabool
merupakan subclass dariint
. Dalam semua kasus di mana tes mengembalikan sesuatu yang hanya akan dievaluasi benar, itu gagal dengan pengecualian. Yang kedua hanya berfungsi selamatrueVal
tidak mengevaluasi salah itu sendiri, yang akan menghasilkan nilai yangfalseVal
ditetapkan meskipun tes itu benar.Tidak. Saya kira Anda berharap sesuatu seperti itu
num1 = 20 if someBoolValue
akan berhasil, tetapi ternyata tidak. Saya pikir cara terbaik adalah denganif
pernyataan seperti yang Anda tulis:if someBoolValue: num1 = 20
sumber
num1 = 10 + 10*(someBoolValue is True)
Itulah jawaban terakhir saya yang baru. Jawaban sebelumnya adalah sebagai berikut dan berlebihan untuk masalah yang disebutkan. Getting_too_clever ==
not Good
. Inilah jawaban sebelumnya ... masih bagus jika Anda ingin menambahkan satu hal untukTrue
cond dan satu lagi untukFalse
:num1 = 10 + (0,10)[someBoolValue is True]
Anda sebutkan
num1
tentunya sudah memiliki nilai yang harus dibiarkan begitu saja. Saya berasumsinum1 = 10
karena itu adalah pernyataan pertama dari posting, jadi operasi yang harus dilakukan20
adalah menambahkan10
.num1 = 10 someBoolValue = True num1 = 10 + (0,10)[someBoolValue is True] print(f'num1 = {num1}\nsomeBoolValue = {someBoolValue}')
menghasilkan keluaran ini
num1 = 20 someBoolValue = True
sumber
num1 = 20 * someBoolValue or num1
sumber
Jika Anda ingin memanggil metode jika beberapa boolean benar, Anda dapat
else None
menghentikan trinary.>>> a=1 >>> print(a) if a==1 else None 1 >>> print(a) if a==2 else None >>> a=2 >>> print(a) if a==2 else None 2 >>> print(a) if a==1 else None >>>
sumber
Jika satu kode baris pasti akan terjadi untuk Anda, Python 3.8 memperkenalkan ekspresi tugas yang dikenal sebagai "operator walrus".
someBoolValue and (num := 20)
Ini
20
akan ditetapkan kenum
jika ekspresi boolean pertama adalahTrue
. Tugas harus berada di dalam tanda kurung di sini jika tidak, Anda akan mendapatkan kesalahan sintaks.num = 10 someBoolValue = True someBoolValue and (num := 20) print(num) # 20 num = 10 someBoolValue = False someBoolValue and (num := 20) print(num) # 10
sumber
Untuk penjelajah waktu masa depan dari google, berikut adalah cara baru (tersedia dari python 3.8 dan seterusnya):
b = 1 if a := b: # this section is only reached if b is not 0 or false. # Also, a is set to b print(a, b)
sumber
Anda pasti bisa menggunakan num1 = (20 if someBoolValue else num1) jika Anda mau.
sumber
Inilah yang bisa saya sarankan. Gunakan variabel lain untuk mendapatkan klausa if dan tetapkan ke num1.
Kode:
num2 =20 if someBoolValue else num1 num1=num2
sumber
Cara lain
num1 = (20*boolVar)+(num1*(not boolVar))
sumber
Anda bisa melakukannya dengan cara ini.
try: a = [i for i in [20] if False][0] except IndexError: print("Do what ever you want here")
Anda dapat menyelesaikan masalah Anda dengan cara ini tetapi, menggunakan 'coba / kecuali blok' bukanlah praktik terbaik untuk python.
sumber