• python函数学习1


    函数1

    1)定义:

    def 函数名(参数列表)
        函数体

    (2)参数传递:

      在python中,一切都是对象,类型也属于对象,变量是没有类型的。

      a = [1,2,3]

      a = "helloworld"

    以上代码中,[1,2,3]是list类型,"helloworld"是string类型,而变量a是没有类型的,它仅仅是一个对象的引用(一个指针),可以是指向list类型对象,也可以指向string类型对象。 

      可更改(mutable)和不可更改(immutable)对象:

    在python中,string,tuples,numbers是不可更改对象,而list,dictionary等是可修改对象。

    ①不可变类型:变量赋值a = 5后再赋值a = 10,这里实际是新生成一个int值对象10,再让a指向它,而5被丢弃,不是改变了a的值,相当于新生成了a.

    ②可变类型:变量赋值list= [1,2,3,4]后再赋值list[2] = 5,则是将列表list的第三个元素值更改,本身没有动,只是内部的一部分值被修改了。 

      python函数的参数传递:

    ①不可变类型:类似于(值传递),如 整数(number)、字符串(string)、元组(tuple)。如fun(a),传递的只是a的值,没有影响a对象本身。

            比如在 fun(a)内部修改 a 的值,只是修改另一个复制的对象,不会影响 a 本身。

     1 def change(a, b):
     2  """传递不可变对象,交换两个数的值"""
     3      c = a
     4      a = b
     5      b = c
     6 
     7 x = 2
     8 y = 3
     9 
    10 change(x, y)
    11 
    12 print(x, y)

    输出结果:

    2 3

    可以发现,将x,y的值传入change函数,进行交换后,输出x,y的值还是原来的值,这就是不可变类型传递。

    ②可变类型: 类似于(引用传递),如 列表(list),字典(dict)。如 fun(list),则是将 list 真正的传过去,修改后fun外部的list也会受影响。

    1 def alter_list(list):
    2     """传递可变对象,修改列表的值"""
    3     list[0] = 3
    4 
    5 list1 = [1, 2, 3, 4, 5]
    6     alter_list(list1)
    7     print(list1)

    输出结果:

    [3, 2, 3, 4, 5]

    可以发现,list1中的值发生了改变,同样的写法,上面的例子中的值没有改变,而下面的值却改变,这就是因为不可变类型和可变类型的参数传递。

    注意:python 中一切都是对象,严格意义我们不能说值传递还是引用传递,我们应该说传不可变对象和传可变对象。

    (3)参数:

      必须参数,位置参数,关键字参数,默认参数,不定长参数。

    ①必须参数: 调用函数时必须传入一个参数。

    1     def func(a):
    2         print(a)
    3         
    4     func()      # 没有参数会报错

    ②位置参数:在传递参数时必须与形参的顺序对应。

    1     def func(a, b):
    2         print('a=%s'%a)
    3         print('b=%s'%b)
    4 
    5     func(2, 3)
    6     func(3, 2)

    ③关键字参数:使用关键字参数允许函数调用时参数的顺序与声明时不一致,因为 Python 解释器能够用参数名匹配参数值。

    1 def func(a, b):
    2   print('a=%s'%a)
    3   print('b=%s'%b)
    4 
    5 func(a=2, b=3)
    6 func(b=3, a=2)

    ④默认参数:调用函数时,如果没有传递参数,则会使用默认参数。

    1     def func(a, b=3):
    2         print('a=%s'%a)
    3         print('b=%s'%b)
    4 
    5     func(2)

    ⑤不定长参数: def 函数名(形参1,*形参2)       加了星号*的参数会以元组(tuple)的形式导入,存放所有未命名的变量参数。

           def 函数名(形参1,**形参2) 加了两个星号**的参数会以字典的形式导入。

     1 def func1(a, *b):
     2   print(a)
     3   print(b)
     4 
     5 func1(3, 4, 5, 'a', [1, 2, 3])
     6 
     7 def func2(a, **b):
     8   print(a)
     9   print(b)
    10 
    11 func2(3, c=4, d=5)  # 因为**要以字典的形式存储,而字典需要key值和value值,所以传参的时候要用这种方式

    输出结果:

    3
    (4, 5, 'a', [1, 2, 3])
    3
    {'c': 4, 'd': 5}

     

      

  • 相关阅读:
    JavaScript中的memorizing技术
    在IE6/7/8下识别html5标签
    JavaScript中的类式继承和原型式继承
    OpenSUSE环境配置
    CentOS环境配置(LNMP)
    CentOS上OpenCC中文简繁体转换
    jQuery点击按钮页面滚动条向下滚动
    javascript-数组常用方法
    Tomcat配置常见错误问题解决方法
    字符串
  • 原文地址:https://www.cnblogs.com/zuoxide/p/10534307.html
Copyright © 2020-2023  润新知