

Pythonで記述された、以下に示すCCクラスの9行目のコード（メソッド `_request`
内の3行目のコード)の意味が分かりません。教えていただけないでしょうか。

**該当箇所:**

[code]

    body = json.dumps(params) if params else ''
    
[/code]

`if params else ''` の判定処理はどのようになっているのでしょうか。

また、この `_request` メソッドを使いたいとき、引数 params および引数 method の値で、結果がどのように変わるか教えてほしいです。

**コード:**

[code]

    class CC(object):
        def __init__(self, access_key, secret_key):
            self.access_key = access_key
            self.secret_key = secret_key
            self.url = 'https://CC.com'
    
        def _request(self, endpoint, params=None, method='GET'):
            nonce = str(int(time.time()))
            body = json.dumps(params) if params else ''
    
            message = nonce + endpoint + body
            signature = hmac.new(self.secret_key.encode(),
                                 message.encode(),
                                 hashlib.sha256).hexdigest()
    
            headers = {
                'ACCESS-KEY': self.access_key,
                'ACCESS-NONCE': nonce,
                'ACCESS-SIGNATURE': signature,
                'Content-Type': 'application/json'
            }
    
            if method == 'GET':
                r = requests.get(endpoint, headers=headers, params=params)
            else:
                r = requests.post(endpoint, headers=headers, data=body)
            return r.json()
    
[/code]


CC BY-SA 4.0
2021-10-09T07:32:23.250
82972
2021-10-09T16:06:39.843
2021-10-09T11:05:44.700
3060
48018
question
python
pythonで記述されたifのコードの処理がどのようにされているか教えてください。


**if params else '' の判定処理はどのようになっているのでしょうか。**

この記事が参考になるでしょう。  
[図解！Python三項演算子を徹底解説！if文(else/elif)を一行で記述！](https://ai-inter1.com/python-
if-1line/)

`params`が指定されている(つまり`None`では無い)かつ空文字列では無いことを判定して、その場合は`json.dumps(params)`の処理結果値を`body`に代入し、指定されていない(つまり`None`のまま)または空文字列の時には空文字列`''`を`body`に代入します。

* * *

**この_requestメソッドを使いたいとき、引数paramsおよび引数methodの値で、結果がどのように変わるか教えてほしいです。**

`引数params`はまず上記最初の質問の処理を経て、ヘッダの`signature`の作成および指定に使われるようですね。

`引数method`は呼び出すメソッドの指定になり、`GET`の時は`GET`が、`GET`以外の時は`POST`が呼ばれます。

そして`引数method`が`GET`の場合は`引数params`として指定された内容が、そのまま`requests.get()`の`params`に指定されています。

そして`引数method`が`GET`以外の場合は上記最初の質問で処理された結果の`body`が`requests.post()`の`data`に指定されています。

「結果」はその呼び出した結果通知されるjsonデータでしょうが、「どのように変わるか」は呼び出したサイト・メソッド・パラメータの内容とその結果によるので、今の質問の情報では答えが出ませんね。

* * *

`None`判定のコメントについて：

質問には記述の良し悪しは含まれていなかったので、動作するであろう内容を書きました。実際には動作確認していません。  
ただし、@metropolisさんのコメントした参照先記事になっているし、その内容はお金(仮想通貨)を扱う物なので、一応は記事の作者が動作確認しているものと思われます。

しかし質問者さんも懸念するように良い書き方とは言えないでしょう。  
こちらのような記事を参考にしてください。  
[PythonでNone判定をしてNoneでなければその変数をif分の中で処理するには](https://ja.stackoverflow.com/q/47199/26370)

上記を適用すれば以下にした方が良いと考えられます。

[code]

    body = json.dumps(params) if params is not None else ''
    
[/code]

ちなみに気になったのでちょっと確認してみたら`params`に`None`ではなく空文字列`''`が指定された場合は、`if params`と`if
params is not None`で動作が変わりますね。  
`params`が空文字列`''`の時に`if params`だとelse側の空文字列`''`が代入され、`if params is not
None`だと`True`状態になって空文字列`''`をパラメータに指定した`json.dumps(params)`が呼ばれて、その結果は`""`が代入されました。

もしかしたら、参照先記事はそうしたつもりで敢えて作ったのかもしれませんね。  
**最初の回答の方は修正しておきます。**

* * *

引数methodのコメントについて：

**→引数methodに`"GET"`を渡す形で記述すれば、`POST`が呼ばれるという理解で正しいですか？**

コメント書き込み時のミスでしょうか？

`"GET"`が渡されれば`GET`が呼ばれます。

もしかしたら`"GET"`と`'GET'`が違う物のように見えるかもしれませんが、Pythonではどちらも`GET`という内容の文字列を表しています。

あるいは小文字の`"get"`ならば`GET`とは違うので`POST`が呼ばれます。

それと同様にHTTPのメソッドとは関係無い文字/文字列を引数methodに指定すると`POST`が呼ばれます。


CC BY-SA 4.0
2021-10-09T08:01:18.223
82973
2021-10-09T16:06:39.843
2021-10-09T16:06:39.843
26370
26370
82972
answer