Maison >développement back-end >Tutoriel Python >Comment les valeurs sont transmises lors de l'exécution des fermetures Python

Comment les valeurs sont transmises lors de l'exécution des fermetures Python

不言
不言original
2018-06-04 11:16:321355parcourir

Cet article présente principalement la méthode de transfert de valeur lors de l'exécution de la fermeture Python. Il analyse le principe et la méthode de mise en œuvre du transfert de valeur lorsque la fermeture Python est exécutée sous forme d'exemples. Le code contient des commentaires plus détaillés pour une compréhension facile. est nécessaire Les amis peuvent se référer à l'exemple

de cet article pour analyser la méthode de transfert de valeur lors de l'exécution de la fermeture Python. Partagez-le avec tout le monde pour votre référence, comme suit :

Explications des problèmes et des problèmes dans le code.

#!/usr/bin/python
#coding: utf-8
# 判断一个人是否及格,如果满分150,则90及格,如果满分100,则60及格
# 开始的疑惑:当fun函数执行完以后,对应的val的值就应该消失,但是,
# 当下面代码再次调用f(60)的时候(这个f()函数就是fun_c()函数)
# 却能够打印出val的值???
def fun(val):
  'val是得到的分数'
  # 打印此时存储的val的地址
  print("%x" % id(val))
  def fun_c(passline):
    'passline是及格线'
    if val >= passline:
      print("通过")
    else:
      print("不及格")
  return fun_c
f = fun(89) # f就是fun_c函数
# 利用__closure__打印出fun_c()函数的属性,可以发现f中第一个元素的id值和val的id值地址相同
# 这说明如果引用了外部的变量(enclosing变量)的话,会将这个变量添加到函数属性中
# 当再次进行查找(即f(60))的时候,并不是到代码中去查找,而是到函数属性中去查找
# 也就是上面的fun_c的属性中有val的值,是一个元组,不能够改变
print(f.__closure__)
f(60)
f = fun(89)
f(90)

Résultats d'exploitation :

12ee0b0
(<cell at 0x017B24B0: int object at 0x012EE0B0>,)
通过
12ee0b0
不及格

Fonction de fermeture :

1. Encapsulation du code

2. Réutilisation du code

Recommandations associées :

Compréhension approfondie du mécanisme de fermeture Python

Fermeture Python méthode pour implémenter le compteur

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn