%sPythonで何を意味しますか?そして、次のコードは何をするのでしょうか?
例えば...
if len(sys.argv) < 2:
sys.exit('Usage: %s database-name' % sys.argv[0])
if not os.path.exists(sys.argv[1]):
sys.exit('ERROR: Database %s was not found!' % sys.argv[1])
%sPythonで何を意味しますか?そして、次のコードは何をするのでしょうか?
例えば...
if len(sys.argv) < 2:
sys.exit('Usage: %s database-name' % sys.argv[0])
if not os.path.exists(sys.argv[1]):
sys.exit('ERROR: Database %s was not found!' % sys.argv[1])
回答:
これは文字列フォーマット構文です(Cから借用したものです)。
「PyFormat」をご覧ください。
Pythonは、値を文字列にフォーマットすることをサポートしています。これには非常に複雑な式を含めることができますが、最も基本的な使用法は、
%sプレースホルダーを使用して文字列に値を挿入することです。
編集:これは本当に簡単な例です:
#Python2
name = raw_input("who are you? ")
print "hello %s" % (name,)
#Python3+
name = input("who are you? ")
print("hello %s" % (name,))
%sトークンは、私は、文字列を挿入(および潜在的にフォーマット)することができます。%sトークンは、%記号の後の文字列に渡すものに置き換えられることに注意してください。また、ここでもタプルを使用し(タプルを使用する文字列が1つだけの場合はオプションです)、1つのステートメントで複数の文字列を挿入してフォーマットできることを示しています。
str.format方法のために廃止されることに注意してください。
(name,)、とだけではなくname?
アンドリューの答えはいいです。
そして、もう少し参考にするために、1つの文字列で複数の書式を使用する方法を示します
"Hello %s, my name is %s" % ('john', 'mike') # Hello john, my name is mike".
文字列の代わりに整数を使用している場合は、%sの代わりに%dを使用してください。
"My name is %s and i'm %d" % ('john', 12) #My name is john and i'm 12
%s、整数で使用しても同じように機能し、文字列に変換されるだけです。
print('This number will be padded with 4 zeros: %05d ' % 1)-これでうまくいきます。print('This number will be padded with 4 zeros: %05s ' % 1)-これはできません `
このformatメソッドはPython 2.6で導入されました。それはより機能的であり、使用することはそれほど難しくありません:
>>> "Hello {}, my name is {}".format('john', 'mike')
'Hello john, my name is mike'.
>>> "{1}, {0}".format('world', 'Hello')
'Hello, world'
>>> "{greeting}, {}".format('world', greeting='Hello')
'Hello, world'
>>> '%s' % name
"{'s1': 'hello', 's2': 'sibal'}"
>>> '%s' %name['s1']
'hello'
%sPythonの文字列フォーマット機能を使用する場合の文字列の変換タイプを示します。より具体的に%sは、str()関数を使用して指定された値を文字列に変換します。これを、値変換に関数を%r使用する変換タイプと比較してくださいrepr()。
%sそして %d、フォーマット文字列/小数点/浮動小数点数などのための書式指定子またはプレースホルダです
最も一般的に使用されるフォーマット指定子:
%s : ストリング
%d :小数
%f : 浮く
自明のコード:
name = "Gandalf"
extendedName = "the Grey"
age = 84
IQ = 149.9
print('type(name):', type(name)) #type(name): <class 'str'>
print('type(age):', type(age)) #type(age): <class 'int'>
print('type(IQ):', type(IQ)) #type(IQ): <class 'float'>
print('%s %s\'s age is %d with incredible IQ of %f ' %(name, extendedName, age, IQ)) #Gandalf the Grey's age is 84 with incredible IQ of 149.900000
#Same output can be printed in following ways:
print ('{0} {1}\'s age is {2} with incredible IQ of {3} '.format(name, extendedName, age, IQ)) # with help of older method
print ('{} {}\'s age is {} with incredible IQ of {} '.format(name, extendedName, age, IQ)) # with help of older method
print("Multiplication of %d and %f is %f" %(age, IQ, age*IQ)) #Multiplication of 84 and 149.900000 is 12591.600000
#storing formattings in string
sub1 = "python string!"
sub2 = "an arg"
a = "i am a %s" % sub1
b = "i am a {0}".format(sub1)
c = "with %(kwarg)s!" % {'kwarg':sub2}
d = "with {kwarg}!".format(kwarg=sub2)
print(a) # "i am a python string!"
print(b) # "i am a python string!"
print(c) # "with an arg!"
print(d) # "with an arg!"
2番目の質問への回答:このコードは何をしますか?...
これは、コマンドライン引数を受け入れるPythonスクリプトのかなり標準的なエラーチェックコードです。
したがって、最初のifステートメントは次のように変換されます。引数を渡していない場合は、今後引数を渡す方法を説明します。たとえば、次の画面が表示されます。
Usage: myscript.py database-name
次のifステートメントは、スクリプトに渡した「データベース名」が実際にファイルシステムに存在するかどうかを確認します。そうでない場合は、次のようなメッセージが表示されます。
ERROR: Database database-name was not found!
ドキュメントから:
argv [0]はスクリプト名です(これはフルパス名であるかどうかに関係なく、オペレーティングシステムに依存します)。コマンドが-cコマンドラインオプションを使用してインタープリターに実行された場合、argv [0]は文字列 '-c'に設定されます。スクリプト名がPythonインタプリタに渡されなかった場合、argv [0]は空の文字列です。
%オペレータは、より強力なの賛成で廃止されましたstr.format方法を参照してくださいPEP-3101。