找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 2520|回复: 5

[求助] 菜鸟的问题,求助了

2

主题

2

帖子

2

积分

贫民

积分
2
千寻 发表于 2021-7-22 17:36:51 | 显示全部楼层 |阅读模式
自定义函数,定义了一个可变的默认值参数,在调用的时候,是随时变化的,可是一没有传其他参数,二既然没有传其他参数,那个就应该使用默认值呀,等于初始化了,怎么几次调用以后还是会变化







def demo(obj=[])
       print(obj)
       obj.append(1)
demo()
demo()


回复

使用道具 举报

0

主题

22

帖子

22

积分

贫民

积分
22
lazycat79 发表于 2021-7-23 08:49:57 | 显示全部楼层
因为obj是一个list类型,list类型在函数中的变化会一直影响obj变量。
回复 支持 反对

使用道具 举报

0

主题

1

帖子

1

积分

贫民

积分
1
vigiles 发表于 2021-7-25 11:51:33 | 显示全部楼层
第一次调用demo()时,初始化形参obj为列表,内部执行append时,列表内添加元素‘1’
第二次调用demo()时,列表obj已经存在了,直接使用。执行到append,又添加一个元素 1.
即 函数的默认值参数仅在第一次被调用时初始化,其后都是直接使用。
(回答个问题填2个验证。。。至于么)
回复 支持 反对

使用道具 举报

1

主题

2

帖子

2

积分

贫民

积分
2
哑蝉 发表于 2021-7-26 09:33:45 | 显示全部楼层
我理解的是   值传递和引用传递 的区别
你可以百度一下讲解。
回复 支持 反对

使用道具 举报

0

主题

1

帖子

1

积分

贫民

积分
1
Catenpl 发表于 2021-7-26 11:00:14 | 显示全部楼层
Python 的参数的默认值是在定义时计算出来的,并且保存在一个变量中。调用该函数时,使用该变量的值作为参数的默认值。
如果调用该函数时改变了该参数,也就改变了该变量的内容,下次调用时,参数的默认值也就变了。
回复 支持 反对

使用道具 举报

0

主题

102

帖子

102

积分

侠客

积分
102
傻眼貓咪 发表于 2021-8-3 21:08:16 | 显示全部楼层
本帖最后由 傻眼貓咪 于 2021-8-3 21:09 编辑
  1. # Python 編程語言中有四種集合數據類型:

  2. # 集合數據類型       序(ordered)       重複成員(duplicate)
  3. # 列表 list        有序,且可變          允許重複
  4. # 元組 tuple       有序,不可變          允許重複
  5. # 集   set         無序,且無索引        沒有重複
  6. # 字典 dictionary  有序,且可變          沒有重複

  7. # 以下是範例:

  8. def demo_list(obj = []): # 可變默認參數 mutable default argument
  9.     print(obj)
  10.     obj.append(1)

  11. def demo_tuple(obj = ()):
  12.     print(obj)
  13.     obj = (1) # 重新賦值

  14. def demo_set(obj = set()): # 可變默認參數 mutable default argument
  15.     print(obj)
  16.     obj.add(1)

  17. def demo_dict(obj = {}): # 可變默認參數 mutable default argument
  18.     print(obj)
  19.     obj['one'] = 1

  20. demo_list() # []
  21. demo_list() # [1]

  22. demo_tuple() # ()
  23. demo_tuple() # ()

  24. demo_set() # set()
  25. demo_set() # {1}

  26. demo_dict() # {}
  27. demo_dict() # {'one': 1}

  28. # 這裡發現,只有元組 tuple 沒有被影響
  29. # 其它卻因為第一次調用時候已經改變默認參數值了

  30. # ----------------------------------------------------------------------------------------------------

  31. # 解決方法:
  32. def demo_list(obj = None): # 默認參數為'無'
  33.     obj = []
  34.     print(obj)
  35.     obj.append(1)

  36. demo_list() # []
  37. demo_list() # []

  38. # ----------------------------------------------------------------------------------------------------

  39. # 來自於 The Hitchhiker's Guide to Python
  40. # by Kenneth Reitz, Tanya Schlusser

  41. # Mutable Default Arguments
  42. # What You Might Have Expected to Happen?
  43. # Python’s default arguments are evaluated once when the function is defined,
  44. # not each time the function is called (like it is in say, Ruby).
  45. # This means that if you use a mutable default argument and mutate it,
  46. # you will and have mutated that object for all future calls to the function as well.
复制代码
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表