python学习笔记4

来源:互联网 发布:javascript定义数组 编辑:程序博客网 时间:2024/05/19 05:31

注意:笔者的python环境是3.x

#!/usr/bin/env python3#coding=utf-8 #函数 def 定义函数#在 python 中,strings, tuples, 和 numbers 是不可更改的对象,而 list,dict 等则是可以修改的对象#不可更改的对象,自身其实就是一个指针,指向一个对象,对其修改其实就是新建一个对象。可以修改对象,对其修改,修改的是内部的元素或者是属性#函数定义和调用'''def debug(str1,str2):    print(str1+":"+str2)    print()    returndebug("我","吃饭了吗?")'''#参数传递(不可变类型参数)'''def change(a):    a=5    returnb=1change(b)#参数b所指向的内容并没有被改掉,a=5只是新建了一个int型对象,并让a指向5print(b)'''#参数传递(可变类型参数)'''def change1(a):    #a=[2,2,2]#这种是更改指针的指向,那么打印出来的c还是不变    a[1]="222222"#这种是直接改变可变类型参数内部的内容,所以打印出来的c是会变的    returnc=[1,1]change1(c)print(c)'''#必备参数:函数中括号有参数,那么调用的时候一定要有参数#关键字参数:即通过参数名=参数值的方式调用函数'''def keyparam(age,name):    print(name+"今年"+age+"岁")    return 11print(keyparam(name="wlt",age="26"))#调用时候乱序也能正常匹配和调用'''#缺省参数:函数定义时,给参数一个默认值,那么当调用的时候没有传参,会自动调用默认值(多个参数情况下,缺省的参数必须要放置末尾)'''def canabsent(name,age="55"):    print(name+"今年"+age+"岁")    returncanabsent(name="wlt",age="26")canabsent("wlt")canabsent(name="wlt")'''#不定长参数:加了星号(*)的变量名会存放所有未命名的变量参数。选择不多传参数也可'''def nolenparam(*param):    print(len(param))    returnnolenparam(1,2,3)nolenparam()'''#匿名函数:由lambda定义的单行表达式,ambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去'''sum=lambda param1,param2:param1+param2print(sum(1,3))'''#全局变量和局部变量'''总结:    内部函数,不修改全局变量可以访问全局变量    内部函数,修改同名全局变量,则python会认为它是一个局部变量    在内部函数修改同名全局变量之前调用变量名称(如print sum),则引发Unbound-LocalError在程序中设置的sum属于全局变量,而在函数中没有sum的定义,根据python访问局部变量和全局变量的规则:当搜索一个变量的时候,python先从局部作用域开始搜索,如果在局部作用域没有找到那个变量,那样python就在全局变量中找这个变量,如果找不到抛出异常(NAMEERROR或者Unbound-LocalError,这取决于python版本。)如果内部函数有引用外部函数的同名变量或者全局变量,并且对这个变量有修改.那么python会认为它是一个局部变量,又因为函数中没有sum的定义和赋值,所以报错。''''''all=1all1=2def allpart():    #print(all)#全局变量all,会报错    print(all1)#全局变量all1,正常调用    all=0    print(all)#局部变量all    returnallpart()print(all)#全局变量all'''
0 0
原创粉丝点击