Function.py
#coding=utf-8
#################################### python函数 ####################################
def f1(param):
"这是函数f1" # 函数定义第一行的字符串用于存放函数说明
print "这是f1函数,传入的参数为:" , param
return
def f2():
"这是函数2"
print "这是f2函数"
return 1
f1(2) # 这是f1函数,传入的参数为: 2
print f2() # 这是f2函数 1
#################################### 参数传递 ####################################
"""
在python中,类型属于对象,变量是没有类型的;变量仅仅是对象的引用,可以引用List对象或者String对象等等;
在python中,string、tuples和numbers是不可更改对象,而list、dict等则是可以修改的对象;
"""
# 可更改对象(list、dict)
list_ = ["lua","python","c++","c","c#"]
print id(list_) # 50755824
list_[1]="python2.x"
print id(list_) # 50755824(内存地址不变)
print list_ # ['lua', 'python2.x', 'c++', 'c', 'c#']
dict_= {'key1':"lua",'key2':'python'}
def f3(dictionary):
"传入字典,并修改"
dictionary['key2']="python2.x"
f3(dict_)
print dict_ # {'key2': 'python2.x', 'key1': 'lua'}
# 不可更改对象(strings、tuples和numbers)
num = 5
print id(num) # 14908720
num = 10
print id(num) # 14908660 (地址改变了)
string = "python lua"
print id(string) # 42414816
string = string+" c++"
print id(string) # 42421528 (地址改变了)
def f4(number):
print id(num) # 14908660
print id(number) # 14908660 (与num地址一致)
number = 555 # 此处相当于number从指向对象2 换成了指向 555对象,并未对对象2作改变,外界num依旧指向对象2
print id(number) # 15644216
f4(num)
print(num) # 10 (num还是指向对象2)
print id(num) # 14908660 (地址不变)
# 必备参数(参数必需以正确的顺序传入函数,调用时数量与声明时的一样)
def whatsName(name,age):
print "你的名字是:",name,", 你已经",age,"岁了"
whatsName("BeiJiaan","25") # 你的名字是: BeiJiaan , 你已经 25 岁了
# 关键字参数(可以使用关键字参数来确定传入的参数值,此时可以允许参数传入的顺序与声明时不一致)
whatsName(age=25,name="BeiJiaan") # 你的名字是: BeiJiaan , 你已经 25 岁了
# 默认(缺省)参数(缺省参数的值如果没有传入,则被认为是默认值)
def whatsName(name,age = 25):
print "你的名字是:",name,", 你已经",age,"岁了"
whatsName("Beijiaan") # 你的名字是: Beijiaan , 你已经 25 岁了
# 不定长参数
def printArgument(arg,*args):
"打印所有输入的参数"
print arg
for val in args:
print val
printArgument("lua",1,2,3,"python","c++") # lua\1\2\3\python\c++
#################################### 匿名函数 ####################################
# lambda表达式
"""
lambda表达式的主体是一个表达式,而不是一个代码块;
其有自己的命名空间,不能访问自由参数列表之外或全局命名空间里的参数;
"""
getSum = lambda arg1,arg2: arg1+arg2
print(getSum(5,6)) # 11
#################################### 变量作用域 ####################################
# 函数内部定义的变量为局部变量(只能被本函数内访问),定义在函数外部的变量为全局变量(整个程序内可访问);
num = 1 # 此处定义的为全局变量
def changeInt1(number):
print(num) # 1(可以访问外部的变量)
number = 999
print(num) # 1(无法修改)
def changeInt2():
num = 999 # 此处相当于定义了一个局部变量num,则此后操作的num都是该局部变量
print(num) # 999(此处的num是局部变量)
changeInt1(num)
changeInt2()
print(num) # 1(两种方法都无法修改)
# 如果想全局变量在函数内收到影响,需要使用global对全局变量进行声明一下;
num = 1
def changeInt3():
global num
num = 999
changeInt3()
print(num) # 999(该方法已成功改变全局变量的值)