zoukankan      html  css  js  c++  java
  • python3学习笔记(4)_function-参数

      1 #python学习笔记 17/07/10
      2 # !/usr/bin/evn python3
      3 # -*- coding:utf-8 -*-
      4 
      5 import math
      6 #函数 函数的 定义
      7 #定义一个求绝对值函数
      8 def abstruct(a):
      9     if not isinstance (a, (int, float)):
     10         raise TypeError("param must be a int or float type")
     11     if a >= 0:
     12         return a
     13     else:
     14         return -a
     15 
     16 
     17 # 如果我们定义好了 abstruct() 函数,那么我们再该目录下启动Python解释器,用from python_function.py import abstruct 来导入 abstruct()函数
     18 
     19 #用pass 语句 定义一个空函数,方便我们写代码时,关注功能,而不是立即写出完整代码
     20 def myTODO():
     21     pass
     22 
     23 # 函数可以 返回多个值(其实是把多个值放到了一个tuple里,只是语法上省略了括号)
     24 def weiyi(x,y,step,angle=0):
     25     nx = x + step * math.cos(angle)
     26     ny = y - step * math.sin(angle)
     27     return nx,ny
     28 
     29 x,y = weiyi(100, 100, 60, math.pi / 6)
     30 print(x ,y)
     31 
     32 # 一、必选参数
     33 #函数的传递参数 位置参数,严格按顺序传递参数
     34 #如 幂函数 x的n次方 其中第一个参数x是底,第二个参数n是指数
     35 def pow(x, n):
     36     s = 1
     37     while n > 0:
     38         n = n-1
     39         s = s * x
     40     return s
     41 
     42 #二、默认参数
     43 #此时,如果pow()函数不传递 两个参数就会报错,但是我们经常要算平方,该怎么做呢?可以设置默认参数,如果不传递第二个参数,可以给他一个默认值
     44 def power(x, n = 2):
     45     s = 1
     46     while n > 0:
     47         n = n-1
     48         s = s*x
     49     return s
     50 
     51 
     52 #注意点: 1、必选参数在前,默认参数在后,2、设置默认参数,默认参数调用降低了函数调用的难度 3、默认参数必须是不可变的 None就是不可变的
     53 def add_end(L=None):
     54     if L is None:
     55         L = []
     56     L.append('END')
     57     return L
     58 
     59 #三、可变参数
     60 #定义包含 可变参数 的函数 计算(a*a+b*b+c*c...)
     61 def cacl(*numbers):
     62     sum = 0
     63     for n in numbers:
     64         sum = sum + n*n 
     65     return sum
     66 
     67 #调用的时候
     68 print("1*1 + 2*2 :", cacl(1, 2))#5
     69 print("1*1 + 2*2 + 3*3 :", cacl(1, 2, 3))#15
     70 
     71 # 我们也可以 把一个定义好的 list 或者 tuple 转化为 可变参数
     72 nums = [1,2,3,4]
     73 print("平:方 1+到4 : " ,cacl(*nums))
     74 
     75 # 四、关键字参数
     76 #可变参数允许传入 0个或者 任意个参数,这些可变参数在函数调用时自动组装为一个tuple.而关键字允许你传入 0个 或任意个含参数名的参数这些关键字参数在内部自动组装为一个dict
     77 def person(name, age, **kw):
     78     print('name : ',name, 'age : ',age, 'other : ',kw)
     79 
     80 person('jim',23,city='NewYork',addr='five road')
     81 
     82 # 与可变参数类似,也可以组装出一个dict,然后把该dict转化为关键字传进去
     83 extra = {"city":"ShangHai","job":"SE"}
     84 person("Dive",28,city=extra['city'],job=extra['job'])
     85 #或者
     86 person("Dive",28,**extra)
     87 
     88 # 五、命名关键字参数
     89 #对于关键字参数,函数调用者可以传入任意不受限制的关键字参数,至于到底传入了那些,就需要在函数内部通过kw检查
     90 #如检查 person() 是否有 city 和 job 参数,此时,调用者人可以传入不受限制的关键字参数
     91 def person(name, age, **kw):
     92     if 'city' in kw:
     93         #有city
     94         pass
     95     if 'job' in kw:
     96         pass
     97     print('name:', name, 'age:', age, 'other',kw)
     98 
     99 person('kiven',27,city='hangzhou',addr='xihu',zipcode='123456')
    100 
    101 #如果要限制关键字参数的名字,就可以用命名关键字参数。例如,只接受 city 和 job 作为关键字参数
    102 def person(name, age, * ,city, job):
    103     print(name, age, city, job)
    104 #可以 这样调用,如果不传入 city 和job 将会抛出错误
    105 person("xiaowang",28,city='Shanghai', job='SE')
    106 
    107 #命名关键字参数可以设置缺省值,从而简化调用
    108 def person(name, age, * , city='Shanghai', job):
    109     print(name, age, city, job)
    110 #由于city在 person定义是设置了默认值,调用时,可不传入city 参数
    111 person('xiaohuang',26,job="SE")
    112 
    113 # 参数组合 在定义 函数时,可以将 必选参数、默认参数、可变参数、关键字参数、命名关键字参数混合使用
    114 def f(a, b , c = 0, *args, **kw):
    115     print('a:', a, 'b:', b, 'c:', c, 'args:',args, 'kw',kw)
    116 f(1,2)
    117 f(1,2,c=3)
    118 f(1,2,3,'a','b')
    119 f(1,2,3,'a','b',x=99)
    120 f(1,2,d=99,ext=None)
    121 
    122 #可以先定义 一个 tuple 和一个 dict,然后当做参数传入
    123 args = (1,2,3,4)
    124 kw = {'d':99, 'x':'#'}
    125 
    126 f(*args, **kw)
  • 相关阅读:
    校园网认证原理
    使VS Code自带的Markdown支持mathjax
    图像处理实用资源
    第一周的python作业
    Python中关于turtle库的笔记
    软件测试入门篇
    如何设计一条好的测试用例打卡第二天
    根据用户登录浅谈软件测试打卡第一天
    Andorid源码系列:View的onTouchEvent()与performClick(),performLongClick()调用时机解析
    论Activity及启动模式,Fragment,Service的使用以及生命周期
  • 原文地址:https://www.cnblogs.com/wjw-blog/p/7146517.html
Copyright © 2011-2022 走看看