1. ホーム
  2. スクリプト・コラム
  3. パイソン

Pythonの関数渡し入門

2022-02-01 22:37:01

関数の引数の渡し方

パラメータを渡すKey-Value方式。

以下は、ごく一般的なパラメータの渡し方であり、パラメータ名は直球勝負で、死語になります。

def show_info(name, title):
    print("Name is: ",name)
    print("Title is: ",title)


次のように使うことができます。

show_info('Lei Learning Committee', 'President of the Student Python Learning Community')
show_info(name='Lei Xueguang', title='President of the Continuous Learning Association')


このように*を2つ使って書くことができ、非常に柔軟性がありますが、デメリットも明らかです(柔軟な構造ではパスが外れたかどうかを判断する必要がある場合があり、直接取得するとエラーが発生しやすくなります)。

def show_info_v2(**kv_dict):
    print("Name is: ", kv_dict['name'])
    print("Title is: ", kv_dict['title'])
show_info_v2(name='Lei Xuecheng', title='College Student Python Learning Community Leader')


以下は、同じように見える効果です。

動的な長さのパラメータ渡し

通常、*とパラメータ名を組み合わせて使用します。

#! /usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2021/10/24 11:39 PM
# @Author : LeiXueWei
# @CSDN/Juejin/Wechat: 雷学委
# @XueWeiTag: CodingDemo
# @File : func_call.py
# @Project : hello
def show_info(name, title):
    print("Name is: ", name)
    print("Title is: ", title)
show_info('Lei Xuecheng Committee', 'College Student Python Learning Community District Director')
show_info(name='Lei Xueguang', title='President of the Continuous Learning Association')
def show_info_v2(name, title, *info):
    print("name is: ", name)
    print("title is: ", title)
    print("Other evaluations: ", info)
show_info_v2('Lei Xuecheng', 'College student Python learning community district director', "Love technology", "Love life")


次のように動作します。

パラメータは関数が握りしめているか?

ちょっと次のプログラムを見てみましょう。

#! /usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2021/10/24 11:39 PM
# @Author : LeiXueWei
# @CSDN/Juejin/Wechat: 雷学委
# @XueWeiTag: CodingDemo
# @File : func_call.py
# @Project : hello
def compute_v1(list):
    sum = 0
    for x in list:
        sum += x
    list = list + [sum]
    print("New address: ", id(list))
    return sum
def compute_v2(list):
    sum = 0
    for x in list:
        sum += x
    list[0] = list[0] * 100
    return sum
_list = [1, 2, 3, 4, 5]
print("Before calling the calculation function v1: ", _list)
print("Memory address before calling compute function v1: ", id(_list))
print(compute_v1(_list))
print("After calling compute function v1: ", _list)
print("Memory address after calling compute function v1: ", id(_list))
_list = [1, 2, 3, 4, 5]
print("Before calling compute function v2: ", _list)
print("Memory address before calling compute function v2: ", id(_list))
print(compute_v2(_list))
print("After calling compute v2: ", _list)
print("Memory address after calling compute v2:", id(_list))


引数参照のアドレスを変更する関数と、引数参照は変更せず、参照されるメモリ空間内の関連アドレス(変数)の値を変更する関数の2つの計算関数を紹介します。

どちらも動作すると言えるでしょう。しかし、外側の _list のアドレスは、新しいアドレスが割り当てられない限り(つまり、v2 の呼び出しの前に再コピーされない限り)、いつでも変更されるわけではありません

以下は実行結果です。

概要

この記事があなたのお役に立ち、Script Houseの他のコンテンツにもっと注目していただけることを願っています。