Python学习函数,“利用函数修改元组的坑”

函数:通俗的讲就是将可以重复利用的功能封装成代码块,供其调取使用,函数能提高应用的模块性,和代码的重复利用率,系统内的函数叫做内建函数,用户也可以自定义函数,叫做用户自定义函数
1、函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 ()
2、任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数
3、函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明
4、函数内容以冒号起始,并且缩进
5、语法结构:

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

简单函数实例:

#定义一个函数名为printName的函数,函数无返回值,只是打印一串字符,()函数调用符,可以看出调用printName函数后,打印
>>> def printName():
    print("Best Today")

>>> printName()
Best Today
>>> 
#定义一个待返回值的函数printName,将传入的值返回给函数名为sendRose的函数,打印输出语句
>>> def printName(name):
    return name
>>> def sendRose(name):
    if name == "yun":
        print("send Rose")
    elif name == "yue":
        print("send lily")

>>> sendRose(printName("yun"))
send Rose

6、传递参数有两种,一是可更改的对象,另一种是不可更改对象,在Python中strings, tuples, 和 numbers 是不可更改的对象,而 list,dict 等则是可以修改的对象,接下来我们看些例子:

#Python中number被识别是number型的数据,我们把number传进去,可以看做是让num指向5存放的内存空间,修改num其实就是让num重新指向新的内存空间,而number则还是指向5的这块内存(个人理解)
>>> number = 5
>>> def reviseNum(num):
    num = 10
    print(num)

>>> reviseNum(number)
10
>>> print(number)
5
>>> 
#Python中name被识别是string型的数据,我们把name传进去,可以看做是让参数name也指向“wang”存放的内存空间,修改参数name其实就是让参数name重新指向新的内存空间,而name则还是指向“wang”的这块内存(个人理解)
>>> name = "wang"
>>> def reviseName(name):
    name = name + "yun" 
    print(name,id(name))

>>> reviseName(name)
wangyun 4590679520
>>> print(name)
wang
>>> id(name)
4591245776
>>> id("wang")
4591245776
>>> id("wangyun")
4591245608
>>>
#特别注意::::我们定义一个reviseTuple可以传递一个元组的参数,该元组包含一个列表和两个字串,我们在函数内修改元组中列表的值,输出后,元组里面的数据也发生变化,当我们修改字串时,编译器会报出“TypeError: 'tuple' object does not support item assignment”,这点有人就该问,我明明修改元组里面的值,为什么元组说是不可改变的呢?其实我们可以认为元组里面存放的时元素的地址,元素改变地址肯定改变,而列表和字典支持原位修改的,修改后只是内存大小的改变而地址是不改变的,所以我们修改了列表后,元组也发生了改变,从这点我们也可以看出当我们传入字典或者列表进行修改,同样会修改原来的值,原因是一样,列表和字典支持原位修改,而地址不变(个人理解)

//修改列表
>>> t1 = ([1,2,3],"wang","yun")
>>> t1
([1, 2, 3], 'wang', 'yun')
>>> def reviseTuple(t):
    l1 = t[0]
    l1[0] = 10
    print(t)

>>> reviseTuple(t1)
([10, 2, 3], 'wang', 'yun')
>>> print(t1)
([10, 2, 3], 'wang', 'yun')
>>> 

//修改字典
>>> t1 = ({"wang":"good"},"wang","yun")
>>> t1
({'wang': 'good'}, 'wang', 'yun')
>>> def reviseTuple(t):
    dict1 = t[0]
    dict1["wang"] = "bad"
    print(t)


>>> reviseTuple(t1)
({'wang': 'bad'}, 'wang', 'yun')
>>> t1
({'wang': 'bad'}, 'wang', 'yun')
>>> 

7、参数传递中参数设定
(1).必需参数,我们上面的简单示例的sendRose(name),name这个参数在调用的时候是必须要传递的否则会报错,且必需参数须以正确的顺序传入函数。调用时的数量必须和声明时的一样
(2).关键字参数,使用关键字参数允许函数调用时参数的顺序与声明时不一致

#传入参数可以和调用的不一致
>>> def printNameAndAge(str, int):
    print("%s : %d" %(str,int))
>>> printNameAndAge(int =30,str ="wang")
wang : 30
>>> 

(3).默认参数,调用函数时,如果没有传递参数,则会使用默认参数

>>> def printNameAndAge(name, age = 25):  #注意:::默认参数必须放在最后
    print("%s : %d" %(name, age))

>>> printNameAndAge("wang")
wang : 25
>>> printNameAndAge("wang", 16)
wang : 16
#这样调用函数也可以使调用参数与声明的不一致(必须指定参数赋值)
>>> printNameAndAge(age = 16, name = "wang")
wang : 16
>>> 

(4)不定长参数,当你声明一个函数,但是不知道需要多少参数合适时,这时不定参数就派上用场了

>>> def printName(name1,name2, *randomTuple):
    print(name1,name2)
    for name in randomTuple:
        print(name)


>>> printName("wang", "yun", "xiaomi","iphone")
wang yun
xiaomi
iphone
>>> printName("wang", "yun", "xiaomi","iphone","wang", "yun", "xiaomi","iphone")
wang yun
xiaomi
iphone
wang
yun
xiaomi
iphone
>>> 

8、匿名函数,关键字lambda,可以理解为是一个表达式不是代码块,以lambda开头返回一个函数,但是lambda 函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数
语法结构: lambda [arg1 [,arg2,…..argn]]:expression

#简单使用
>>> count = lambda num1,num2:num1 * num2
>>> print (count(num2 = 15, num1 = 22))
330
>>> print (count(10, 100))
1000
>>> 

9、Python 中只有模块(module),类(class)以及函数(def、lambda)才会引入新的作用域,其它的代码块(如 if/elif/else/、try/except、for/while等)是不会引入新的作用域的,也就是说这这些语句内定义的变量,外部也可以访问

>>> def printAge():
    num = 10   #局部
>>> num
Traceback (most recent call last):
  File "<pyshell#4>", line 1, in <module>
    num
NameError: name 'num' is not defined
>>> if True:
    num1 = 20
>>> num1
20
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值