Python学习函数,“利用函数修改元组的坑”
2017-12-20 11:35
477 查看
函数:通俗的讲就是将可以重复利用的功能封装成代码块,供其调取使用,函数能提高应用的模块性,和代码的重复利用率,系统内的函数叫做内建函数,用户也可以自定义函数,叫做用户自定义函数
1、函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 ()
2、任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数
3、函数的第一行语句可以选择性地使用
d489
文档字符串—用于存放函数说明
4、函数内容以冒号起始,并且缩进
5、语法结构:
简单函数实例:
6、传递参数有两种,一是可更改的对象,另一种是不可更改对象,在Python中strings, tuples, 和 numbers 是不可更改的对象,而 list,dict 等则是可以修改的对象,接下来我们看些例子:
7、参数传递中参数设定
(1).必需参数,我们上面的简单示例的sendRose(name),name这个参数在调用的时候是必须要传递的否则会报错,且必需参数须以正确的顺序传入函数。调用时的数量必须和声明时的一样
(2).关键字参数,使用关键字参数允许函数调用时参数的顺序与声明时不一致
(3).默认参数,调用函数时,如果没有传递参数,则会使用默认参数
(4)不定长参数,当你声明一个函数,但是不知道需要多少参数合适时,这时不定参数就派上用场了
8、匿名函数,关键字lambda,可以理解为是一个表达式不是代码块,以lambda开头返回一个函数,但是lambda 函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数
语法结构: lambda [arg1 [,arg2,…..argn]]:expression
9、Python 中只有模块(module),类(class)以及函数(def、lambda)才会引入新的作用域,其它的代码块(如 if/elif/else/、try/except、for/while等)是不会引入新的作用域的,也就是说这这些语句内定义的变量,外部也可以访问
1、函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 ()
2、任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数
3、函数的第一行语句可以选择性地使用
d489
文档字符串—用于存放函数说明
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
相关文章推荐
- Python学习笔记——利用闭包写递增函数
- Python学习20:利用函数来打印文件内容
- Python学习19:其他应用(列表综合、列表或元组作为函数参数、lambda形式)
- python学习总结---列表、元组、字符串、字典中一些常用函数
- Dive Into Python 学习记录1-函数/模块导入/字典/列表/元组/字符串分割、连接、格式化/映射list/
- python网络数据采集学习范例—利用CSS爬取网站特定标签,BeautifulSoup函数介绍及子标签
- 学习笔记之Python 切片:利用切片操作,实现一个trim()函数,去除字符串首尾的空格
- 利用闭包把Python函数当类使
- DOM学习4:利用DOM去修改CSS样式
- Python 学习笔记(一)语句,变量,函数
- python学习--函数使用
- Python学习手记 pt4 函数
- Python 学习笔记【使用元组的注意点】
- python 学习 (三) python利用mysqldb操作数据库
- 学习C语言_指针_4_通过指针使被调函数修改主调函数
- 学习C语言_指针_4_通过指针使被调函数修改主调函数
- JS利用函数修改全局变量
- Python 学习笔记:需要仔细阅读一个函数
- PHP高级应用学习笔记之——利用header()函数设置浏览器缓存