zoukankan      html  css  js  c++  java
  • 20201022-Python学习笔记9.3

    位置参数:

    计算x的平方的函数

    >>> def power(x):
    ...     return x * x
    ...
    >>> power(3)
    9
    >>> power(88)
    7744
    >>>

    对于power(x)函数,参数x就是一个位置参数。

    当我们调用power函数时,必须传入一个有且仅有的一个参数x:

    把power(x)修改为power(x,n),用来计算x的n次方

    def power(x, n):
    	s = 1
    	while n > 0:
    		n = n - 1
    		s = s * x
    	return s
    

      

    >>> from q3 import power
    >>> power(2,3)
    8
    >>> power(3,3)
    27
    >>> power(2,4)
    16
    >>>

    修改后的power(x,n)函数有两个参数:x和n,这两个参数都是位置参数,调用函数时,传入的两个值按照位置顺序依次赋给参x和n。

    默认参数

    缺少参数n,报错

    >>> power(9)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: power() missing 1 required positional argument: 'n'
    >>>

    这个时候,默认参数就派上用场了。由于我们经常计算x2,所以,完全可以把第二个参数n的默认值设定为2:

    def power(x,n=2):
    	s = 1
    	while n > 0:
    		n = n - 1
    		s = s * x
    	return s
    

      只输入一个参数时,第二个参数默认为2,可计算出结果。

    >>> from q3 import power
    >>> power(9)
    81
    >>> power(9,2)
    81
    >>> power(9,4)
    6561
    >>>
    

      

    设置默认参数时,需要注意:

    1、必选参数在前,默认参数在后,否则Python的解释器会报错

    (思考一下为什么默认参数不能放在必选参数前面)

    2、如何设置默认参数。

    当函数有多个参数时,把变化大的参数放前面,变化小的参数放后面。变化小的参数就可以作为默认参数。

    使用默认参数最大的好处是能降低调用函数的难度

    例子1:

    def enroll(name,gender):
    	print('name:',name)
    	print('gender:',gender)
    

      

    >>> from q3 import enroll
    >>> enroll('wf','t')
    name: wf
    gender: t
    >>>
    

    例子2:

    def enroll(name,gender,age=6,city='luoyang'):
    	print('name:',name)
    	print('gender:',gender)
    	print('age:',age)
    	print('city:',city)
    

      

    >>> from q3 import enroll
    >>> enroll('ww','f','5')
    name: ww
    gender: f
    age: 5
    city: luoyang
    >>> enroll('ww','f')
    name: ww
    gender: f
    age: 6
    city: luoyang
    >>> enroll('ww','f','3','shanghai')
    name: ww
    gender: f
    age: 3
    city: shanghai
    >>> enroll('ww','f','city=beijing')
    name: ww
    gender: f
    age: city=beijing
    city: luoyang
    >>> enroll('ww','f',city='beijing')
    name: ww
    gender: f
    age: 6
    city: beijing
    >>>
    

      后两个为默认参数,前两个参数可变,后两个参数没有提供时使用默认值。可以按顺序传入默认参数,不按顺序时需把参数名加上。

    例子3:

    def add_end(L=[]):
    	L.append('END')
    	return L
    

      

    >>> add_end([1,2,3,4])
    [1, 2, 3, 4, 'END']
    >>> add_end()
    ['END']
    >>> add_end()
    ['END', 'END']
    >>> add_end()
    ['END', 'END', 'END']
    >>> add_end()
    ['END', 'END', 'END', 'END']
    >>>
    

      

    Python函数在定义的时候,默认参数L的值就被计算出来了,即[],因为默认参数L也是一个变量,它指向对象[],每次调用该函数,如果改变了L的内容,则下次调用时,默认参数的内容就变了,不再是函数定义时的[]了。

    默认参数必须指向不变对象

    修改例子3:

    def add_end(L=None):
    	if L is None:
    		L = []
    	L.append('END')
    	return L
    

      

    >>> from q3 import add_end
    >>> add_end()
    ['END']
    >>> add_end()
    ['END']
    >>> add_end()
    ['END']
    >>> add_end([1,2,3,4])
    [1, 2, 3, 4, 'END']
    >>>
    

      程序设计时,尽量设计为不变参数。

    可变参数

    可变参数就是传入的参数个数是可变的,可以是1个,也可以是多个,也可以0个

    例子,计算a的平方+b的平方+c的平方+d的+。。。

    调用的时候,需要先组装一个list或tuple

    def cacl(numbers):
    	sum = 0
    	for n in numbers:
    		sum = sum + n * n
    	return sum
    

      

    >>> from q3 import cacl
    >>> cacl([1,2,3])
    14
    >>> cacl((1,2,3))
    14
    >>> 

    利用可变参数,进行简化。把函数的参数改为可变参数。

    def cacl(*numbers):
    	sum = 0
    	for n in numbers:
    		sum = sum + n * n
    	return sum
    

      

    >>> from q3 import cacl
    >>> cacl(1,2,3,4)
    30
    >>> cacl(1,2,3)
    14
    >>> cacl(1)
    1
    >>> cacl()
    0
    >>>

    定义可变参数和定义一个list或tuple参数相比,仅仅在参数前面加了一个*号。在函数内部,参数numbers接收到的是一个tuple,因此,函数代码完全不变。但是调用该函数时,可以传入任意个参数,包括0个参数。

    如果已经有一个list或者tuple,要调用一个可变参数可以这样做

    >>> nums = [1,2,3]
    >>> cacl(nums[0],nums[1],nums[2])
    14

    Python 允许你在list或tuple前面加一个*号,把list或tuple的元素变成可变参数传进去:

    >>> nums = [1,2,3]
    >>> cacl(*nums)
    14
    >>>

    *nums表示把nums这个list的所有元素作为可变参数传进去

    关键字参数

    可变参数允许你传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple。而关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict。

  • 相关阅读:
    HDU
    2019CCPC秦皇岛自我反省&部分题解
    图论之二分图相关内容
    图论之一般图相关内容
    2019 南昌ICPC网络赛H The Nth Item
    HDU 5486 Difference of Clustering 暴力模拟
    图论之tarjan真乃神人也,强连通分量,割点,桥,双连通他都会
    数论之二次剩余
    没有哈密瓜只有哈密顿----图论之哈密顿回路
    面试题整理:C#(二)
  • 原文地址:https://www.cnblogs.com/lookmefly/p/13859623.html
Copyright © 2011-2022 走看看