Python 函数的使用小结

函数的好处:提高代码复用性,简化代码,代码可扩展。

函数只有调用的时候才会被执行。

1.参数:

形参&实参;

位置参数,属于必填参数;
默认值参数,为非必填参数,没有传值时使用默认值;
关键字参数;
可变参数;
不定长参数;

例1:
 1 # file_name,content 为位置参数,属于必填参数,content1是默认值参数,没有传入值为使用默认值,非必填参数
 2 def write_file(file_name,content,content1 = 'test'): # 形参,形式参数,
 3     f = open(file_name,'a+',encoding='utf-8')
 4     f.seek(0)
 5     f.write(content + '---' +content1 + '\n')
 6     f.close()
 7 write_file('file0.txt','hello world') #向文件'file.txt' 写入 content 为'hello world',以及content1的默认值 'test'
 8 #write_file('file0.txt') # 只传一个会报错,content1是默认值参数可以不传值
 9 write_file('file0.txt','aaa','see you') #实参,实际参数,写入'aaa' 以及'see you'
10 write_file(file_name='file0.txt',content ='good') # 关键字参数
结果如下:

 

例2: *args 的使用

def test1(a,b=1,*args): # *args 可变参数, 不一定写*args, 也可以别的,可随意写,但是一般都是写*args
    print(a,b,args)
    #print(args[0]) # 元祖第一个值,如果函数调用的时候没有传入*args的值,这句话会报错
test1('ttti') #ttti 1 ()
# 位置调用,第一个给a, 第二个给b, 后面的都是*args
test1('nancy',2,'123','456','789') # args 是个元祖 -> args ('123', '456', '789')
#nancy 2 ('123', '456', '789')
#关键字调用,可变参数不能和关键字一起调用,如果可变参数要传值的话要按顺序来传
test1(b=5,a=10)#10 5 ()
t =(1,2,3,4)
test1(*t)
#1 2 (3, 4)
y = [6,7,8]
test1(*y)
#6 7 (8,)
r = {'aa':'09','bb':'89','cc':'78'}
test1(*r) #打印的是字典的key,因为字典也无序,所有打印的值会变
#cc aa ('bb',)

 

例3:**kwargs的使用

def test2(**kwargs):
    print(kwargs)
test2() # -> {} 空字典
test2(name = 'hhh',sex = '18')  # -> {'name': 'hhh', 'sex': '18'}

 

2. 返回值

如果想获取到函数处理的结果,那么必须return,
如果函数没有写retun的话,返回结果是None,
函数里遇到return,函数立即结束。
 1 def test_1(file_name,content = 'ttt'):
 2     f = open(file_name,'a+',encoding='utf-8')
 3     #return
 4     if content:
 5         f.write(content + '\n')
 6         res = ''
 7     else:
 8         f.seek(0)
 9         res = f.read()
10         #return res # 写在这的话,如果走else 时,遇到return 函数立即结果,那么文件不会被关闭,因此要放在f.close() 下面
11     f.close()
12     return res
13 #print(res)  #函数里的变量外面不能引用
14 text = test_1('file3.txt')
15 print(text)

 

3. 局部变量和全局变量

全局变量的作用域是整个程序,在程序最前面定义,全局变量如果要在函数中修改的话,需要加global关键字声明,如果是list、字典和集合的话,则不需要加global关键字,直接就可以修改。

1 a = 100   #全局变量
2 def test():
3     #global a #如果想要修改全局变量的值,必须要声明一下
4     print(a) 
5     a = 5  # 局部变量
6     print(a)
7 test() # 函数要调用才能使用

这种情况直接print(a) 会报错,UnboundLocalError: local variable 'a' referenced before assignment

变量在使用前必须要先声明。

如果第4行想打印全局变量a =100的值的话,可以使用第3行,记住,使用前先声明。

这样输入的结果为100 和5,第一个输出的是全局变量100,第二个是局部变量5。

 

4. 递归:自己调用自己

1 def test1():
2     num = int(input('please enter a number:'))
3     if num % 2 ==0: #判断输入的数字是不是偶数
4         return True
5     print('不是偶数请重新输入')
6     return test1() # 如果不是偶数的话继续调用自己,输入值
7 print(test1()) #调用test1()

 

posted @ 2018-01-10 16:48  nancy05  阅读(615)  评论(0编辑  收藏  举报