2016-12-19 4 views
2
# this code I don't understand 
def cls():      #if statement freaks me out 
    os.system('cls' if os.name=='nt' else 'clear') 

Я понимаю, что он работает, но не ПОЧЕМУ он работает. После нескольких часов просмотра google, python docs и stackoverflow я не стал более мудрее. Я не смог найти ничего объясняющего, как использовать оператор IF в вызове функции, подобном этому. Я запустил его под 2,7 и 3,5, поэтому он не определен для конкретной версии. Я видел похожие вещи, которые делали с помощью циклов, чтобы понять, что это может быть стандартный способ делать вещи. Я вроде как сам. Просто не понимаю, как это работает.Почему этот код python работает?

Я смущен тем, как вычисляется оператор IF в системном вызове, и меня особенно смущает синтаксис оператора IF. Я не видел этого синтаксиса в любой из документации, которую я прочитал.

Python для меня совершенно новый. Так что простите меня, если это прост. Но я этого не понимаю.

+0

'os.system' ожидает, что команда, рядный' if' генерирует один. – Maroun

+0

Это просто оператор if. 'system' ожидает только строку, и выражение поставляет ее независимо от того, как это происходит. –

ответ

4

Если вы больше всего знакомы с C-подобными языками и их тернарным оператором, то a if b else c Python похож на b ? a : c. Таким образом, приведенный выше код говорит:

if we are on NT/Windows 
    then use `cls` 
else (for Linux, etc) use `clear` 

Результат затем передается команде os.system() для выполнения операции OS-специфичны.

Адрес some tutorial information on this subject.

+0

Wow ... y'all быстро! – ClayD

+0

Мне не разрешили редактировать мой комментарий к первой строке. Хит вступит слишком рано. С аналогичной работой для меня. Я знал, что делает код, но не знал этого синтаксиса и недостаточно умен, чтобы найти его документы. Большое спасибо за ответ и ссылку. – ClayD

2

Выражение if не выполняется внутри системного вызова. Выполняется до системный вызов. Ваш код эквивалентен

command = 'cls' if os.name=='nt' else 'clear' 
os.system(command) 

КРП само выражение только короткая форма для если заявление

if os.name=='nt': 
    command = 'cls' 
else: 
    command = 'clear' 
os.system(command) 
4
A if C else B 

Это первый оценивающей C; если это правда, A оценивается для получения результата , в противном случае B оценивается для получения результата.

Этот ярлык условный синтаксис выражений был добавлен, так как Python 2,5 Check it here

Там похож синтаксис в других языках, принимая Java, например: min = (a<b)? a: b, который проверяет, является ли меньше, чем Ь, он возвращает, если меньше , в противном случае возвращает b. BTW, это звонок тернарный оператор в java.

В вашем случае:

'cls' if os.name=='nt' else 'clear' он проверяет, равен ли os.nament в строку, если она есть, она возвращает cls, в противном случае она возвращает clear

+0

Спасибо. Ссылка была особенно полезной. Кен Y-N использовал оператор стиля C, чтобы объяснить (b? A: c), который, как я думал, тоже была хорошей аналогией. – ClayD

3

этого встроенный if - else является версией тройного оператора python.

в таких языках, как C/C++/Java/JavaScript можно было бы написать

a = b > c ? 10 : 20 

в питона можно было бы написать так же, как

a = 10 if b > c else 20 

вы можете использовать ту же конструкцию, чтобы передать параметры функции ,

в C/C++

foo(b > c ? 10 : 20) 

В Python

foo(10 if b > c else 20) 
Смежные вопросы