Python学习函数,“利用函数修改元组的坑”
来源:互联网 发布:开淘宝店详细步骤 编辑:程序博客网 时间:2024/05/16 19:41
函数:通俗的讲就是将可以重复利用的功能封装成代码块,供其调取使用,函数能提高应用的模块性,和代码的重复利用率,系统内的函数叫做内建函数,用户也可以自定义函数,叫做用户自定义函数
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 yunxiaomiiphone>>> printName("wang", "yun", "xiaomi","iphone","wang", "yun", "xiaomi","iphone")wang yunxiaomiiphonewangyunxiaomiiphone>>>
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 #局部>>> numTraceback (most recent call last): File "<pyshell#4>", line 1, in <module> numNameError: name 'num' is not defined>>> if True: num1 = 20>>> num120
- Python学习函数,“利用函数修改元组的坑”
- Python:元组函数
- Python元组内置函数
- python元组函数、列表
- Python 把序列转换为元组的函数tuple
- 3-Python-字典、元组、函数(上)
- python元组学习 sublime的多行前N个元素选中 函数的使用 不定长参数 可变参数
- 利用友元函数实现对运算符的重载
- python学习总结---列表、元组、字符串、字典中一些常用函数
- python函数学习--函数的四种传参方式
- 利用成员函数、友元函数和一般函数,实现三个版本的求两点间距离的函数
- 利用友元函数,重载运算符
- C++友元函数学习
- C++友元函数学习
- python-为被装饰的函数保存元数据-26
- 函数的瞬时python 多端元光谱混合分解<七>
- python的函数学习笔记
- python学习:函数的参数
- CAS的.NET客户端的配置示例
- 倒冲领料
- C#版的MsMultiPartFormData
- eslint语法检测规则
- hibernate映射文件出现should be mapped with insert="false" update="false"
- Python学习函数,“利用函数修改元组的坑”
- nodeJS微信分享
- 搜索加商品列表加排序
- [Leetcode] 538. Convert BST to Greater Tree 解题报告
- 欧美两重天?欧元垄断市场局面即将展开?
- shell:文件显示命令cat、more、less、tail
- 用 Python分析胡歌的《猎场》到底值不值得看?
- mongodb robo3t 可视化工具查询日期
- ViewPager+Hanlder实现图片轮播