fun_kwonly.py 891 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. # to test keyword-only arguments
  2. # simplest case
  3. def f(*, a):
  4. print(a)
  5. f(a=1)
  6. # with 2 keyword-only args
  7. def f(*, a, b):
  8. print(a, b)
  9. f(a=1, b=2)
  10. f(b=1, a=2)
  11. # positional followed by bare star
  12. def f(a, *, b, c):
  13. print(a, b, c)
  14. f(1, b=3, c=4)
  15. f(1, c=3, b=4)
  16. f(1, **{'b':'3', 'c':4})
  17. try:
  18. f(1)
  19. except TypeError:
  20. print("TypeError")
  21. try:
  22. f(1, b=2)
  23. except TypeError:
  24. print("TypeError")
  25. try:
  26. f(1, c=2)
  27. except TypeError:
  28. print("TypeError")
  29. # with **kw
  30. def f(a, *, b, **kw):
  31. print(a, b, kw)
  32. f(1, b=2)
  33. f(1, b=2, c=3)
  34. # with named star
  35. def f(*a, b, c):
  36. print(a, b, c)
  37. f(b=1, c=2)
  38. f(c=1, b=2)
  39. # with positional and named star
  40. def f(a, *b, c):
  41. print(a, b, c)
  42. f(1, c=2)
  43. f(1, 2, c=3)
  44. f(a=1, c=3)
  45. # lambda as kw-only arg (exposes nested behaviour in compiler)
  46. def f(*, x=lambda:1):
  47. return x()
  48. print(f())
  49. print(f(x=f))
  50. print(f(x=lambda:2))