QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 6505|回复: 1
打印 上一主题 下一主题

Python中*和**运算

[复制链接]
字体大小: 正常 放大
hfyxr        

2

主题

1

听众

4

积分

  • TA的每日心情
    开心
    2020-5-30 12:37
  • 签到天数: 1 天

    [LV.1]初来乍到

    网络挑战赛参赛者

    跳转到指定楼层
    1#
    发表于 2020-4-15 11:15 手机频道 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta
    在 Python 中,* 和 ** 具有语法多义性,具体来说是有四类用法。" z, |" N, L# X% ?9 D7 D
    / }! `8 `6 |$ s2 @, K% N" T+ Z
    1. 算数运算
    ! t* e! d* ?, ~- B/ U3 _8 P3 I; V* G. F$ f2 d' E; b7 J2 j3 B
    *  代表乘法
    / l( i2 Z8 r# x% f; n) k; z2 g  R1 P3 h: ?# U+ b. v
    ** 代表乘方
    : R# a+ X0 m1 c, P% b6 ]7 w" x7 b: N& l/ R" \/ ?; ^! B! I
    >>> 2 * 5
    " ?" {& D. T* i3 X. I# x- s9 b7 b4 _102 M8 l3 _. Q: R
    >>> 2 ** 51 ]+ r1 I. ?7 S# V9 b- I9 r; @
    328 ?$ K9 t7 d& r1 ?
    2. 函数形参
    % ^0 \) ?* ?, J& R
    * d; V% T: |+ C5 ^*args 和 **kwargs 主要用于函数定义。2 ^  o% `' ^# n  {2 }
    0 I' I& O# N% ]) o1 b* D+ N
    你可以将不定数量的参数传递给一个函数。不定的意思是:预先并不知道, 函数使用者会传递多少个参数给你, 所以在这个场景下使用这两个关键字。其实并不是必须写成 *args 和 **kwargs。  *(星号) 才是必须的. 你也可以写成 *ar  和 **k 。而写成 *args 和**kwargs 只是一个通俗的命名约定。
    * g3 B4 X) ^: F
    0 k2 m8 C) ?2 D# x6 O# Qpython函数传递参数的方式有两种:
    % @0 ^! A' `3 l0 D% }8 o) U4 M0 J& d4 {- G' B) |
    位置参数(positional argument)4 g( J0 r1 E1 }3 c
    关键词参数(keyword argument), l; s5 n! I  \$ ]2 ?; i
    *args 与 **kwargs 的区别,两者都是 python 中的可变参数:( e; i0 q# M7 g" A. ?

    # c! e# v/ ~6 V9 H*args 表示任何多个无名参数,它本质是一个 tuple% B0 l0 A/ K  j$ y: |3 T- ?+ E
    **kwargs 表示关键字参数,它本质上是一个 dict9 I0 e2 U! D. j; N5 \6 N; c
    如果同时使用 *args 和 **kwargs 时,必须 *args 参数列要在 **kwargs 之前。" K8 t7 S5 x# \1 \& Q5 ~

    * J, o& h+ j5 C" S8 v- ?6 A; i% Q>>> def fun(*args, **kwargs):5 j! A' p& [3 f7 v; y- j& Y
    ...     print('args=', args)' F& j3 ^/ q+ u( a8 B
    ...     print('kwargs=', kwargs)- \/ l4 C* S! r7 h. n4 j
    ...
    # D. i/ k, ~& W>>> fun(1, 2, 3, 4, A='a', B='b', C='c', D='d')
    ) _2 Q& a7 M8 P2 ]* Bargs= (1, 2, 3, 4)3 z! A! y) m# M; O) l. m4 N
    kwargs= {'A': 'a', 'B': 'b', 'C': 'c', 'D': 'd'}
    # ~- K; W: x* Z- X! B! m使用 *args
    " d  o5 \7 L$ `2 X
    ; j, X: g+ a7 a>>> def fun(name, *args):$ P5 k- v- H' Z- F! u! Y" |
    ...     print('你好:', name)
    $ x7 I# K8 ?1 Y) D1 W' m...     for i in args:! L, O" V1 K, a
    ...         print("你的宠物有:", i)
    4 m' p( c/ w* k. }1 t! k...
    8 q( `  F& _7 B) B5 z* [>>> fun("Geek", "dog", "cat")
    " m6 q$ A: s  i& l- d0 w/ D& E你好: Geek  `6 J$ M9 ~  F7 c1 K
    你的宠物有: dog
    $ \+ i# a, E* W; `- q5 n你的宠物有: cat$ g/ u% r3 |; ^3 j/ Q5 ?; g* z7 B
    使用 **kwargs
    ' K8 @" d2 f* X0 A4 k8 d4 {9 J' ^
    . G5 N; V+ o  E8 V>>> def fun(**kwargs):( c; \" i7 I5 b3 H/ B# T
    ...     for key, value in kwargs.items():4 W- n0 y! \; v# ]: o
    ...         print("{0} 喜欢 {1}".format(key, value)), v7 P8 _0 e$ \4 c4 g# B
    ... : [) T/ o: i6 O( U4 r
    >>> fun(Geek="cat", cat="box")
    9 z+ \# s4 c0 Z- }; t- M8 jGeek 喜欢 cat
    - J7 w6 \) s) Q, Y/ lcat 喜欢 box
    , D1 O; D+ y- l3. 函数实参
    7 x" Y& G1 y, C6 P( k& p$ {% f4 t
    2 h& G, M3 G$ v, Y) U# P9 K6 j  x! ]如果函数的形参是定长参数,也可以使用 *args 和 **kwargs 调用函数,类似对元组和字典进行解引用:
      V  Z, o7 a7 i& I; v0 b4 f$ [4 R: s( p, d) O8 {4 x  y
    >>> def fun(data1, data2, data3):
    & O( K$ Q1 l- v0 t1 d, t...     print("data1: ", data1)
    9 d( W% y( x& c...     print("data2: ", data2)
    + f% R5 M1 d* S. O0 a...     print("data3: ", data3)6 D1 K& P, ?( B9 D
    ... 0 T8 H! d6 X' N) c  W
    >>> args = ("one", 2, 3)7 _( J8 S$ X4 \5 f' a2 y/ v8 T( q$ G
    >>> fun(*args)
    ) q) a$ g6 B3 l3 Q6 Cdata1:  one, e" O6 a5 u6 s: f; A0 K
    data2:  24 Z" \6 r+ A2 W# R& a
    data3:  3, Q1 M0 }7 w+ y2 q" g$ O5 R8 M! Y
    >>> kwargs = {"data3": "one", "data2": 2, "data1": 3}
    " m) z; T' z4 U6 |, ?. [$ ]>>> fun(**kwargs)# V8 }3 N! X7 }: j) G& T. S! ]
    data1:  3; h3 }! L% _- G/ w* T3 D3 R
    data2:  2) I7 g+ U; [; p
    data3:  one4 W) d7 @+ @7 j' w8 D, a
    4. 序列解包3 s' o4 O5 a4 a" j) W& y
    ' `2 _, m  ]% L
    序列解包 往期博客有写过,这里只列出一个例子,序列解包没有 **。5 k% n2 v% h: D+ g4 B+ b; O
    0 E, E$ g* w6 q
    >>> a, b, *c = 0, 1, 2, 3  ) C0 F, D0 p6 m6 \
    >>> a  + K+ u! l  b; J7 H1 r6 j' Q2 ~2 E/ Y
    0  7 P/ N5 r" f. E, [
    >>> b  7 w$ g' R& K, `; ~6 j" M
    1  
    7 l+ k0 B$ `+ a+ [# a9 H" e>>> c  3 W* q( Q7 s: S& x
    [2,3]  h& c: c4 R+ _$ |3 b4 X
    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信

    69

    主题

    3

    听众

    661

    积分

    升级  15.25%

  • TA的每日心情
    开心
    2020-9-13 05:34
  • 签到天数: 149 天

    [LV.7]常住居民III

    网络挑战赛参赛者

    群组2013认证赛C题讨论群组

    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2026-4-20 12:40 , Processed in 0.410738 second(s), 55 queries .

    回顶部