首页 > 代码库 > Python 函数

Python 函数


 

函数

 

函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。

 

函数能提高应用的模块性,和代码的重复利用率。

 

函数需要先定义再使用

 

 


 

函数类别

Python提供了许多 内置函数,比如print(),len()....

#内置函数:内置到解释器中
>>> len
<built-in function len>
>>> print
<built-in function print>

 

但你也可以自己创建函数,这被叫做 用户自定义函数

 定义函数的格式:

 

1 ‘‘‘
2 def 函数名(arg1,arg2,arg3):
3     ‘描述信息‘
4     函数体
5     return
6 ‘‘‘


 1 def foo():
 2     print(from the foo)
 3 
 4 
 5 def bar(x,y):
 6     print(from bar)
 7     res=x+y
 8     return res
 9 
10 
11 # foo()     #函数调用的语句形式
12 # res=bar(1,2)     #函数调用的表达式形式
13 # res1=bar(1,2)*10    #函数调用的表达式形式
14 # print(res1)
15 
16 
17 res2=bar(bar(1,2),3) #函数的调用作为另外一个函数的参数
18 
19 print(res2)

 

 

  • 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 ()
  • 任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数。
  • 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
  • 函数内容以冒号起始,并且缩进。
  • return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。
技术分享
 1 #用函数输出以下内容:
 2 ‘‘‘
 3 #############
 4 落霞与孤鹜齐飞
 5 #############
 6 ‘‘‘
 7 
 8 def print_line():
 9     print(#*13)
10 
11 def print_msg():
12     print(落霞与孤鹜齐飞)
13 
14 def print_line():
15     print(#*13)
16 
17 print_line()
18 print_msg()
19 print_line()
自定义函数_简例

 

函数的参数

A.

技术分享

1.形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只在函数内部有效。函数调用结束返回主调用函数后则不能再使用该形参变量

 def foo(x,y):
     print(x)
     print(y)

 foo(1,2)
 # foo(y=2,x=1) #只是与上面的 输入方式不同,结果同

 

 

 

2.实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等办法使参数获得确定值

 

3.位置参数和关键字(标准调用:实参与形参位置一一对应;关键字调用:位置无需固定)

 1 #------在实参的角度------
 2 
 3 def foo(x,y):
 4     print(x)
 5     print(y)
 6 
 7 # 第一种:按照位置传值
 8  foo(1,2)
 9  foo(2,1)
10 
11 #
12 # 第二种:按照关键字传值
13  foo(x=1,y=2)
14  foo(y=2,x=1)
15 
16 # 第三种:混着用
17  foo(1,y=2)
18 # 问题一:按位置传值必须在按关键字传值的前面
19  foo(y=2,1) #报错
20 # 问题一:对于一个形参只能赋值一次
21  foo(1,y=2)

 

 

4.默认参数

 

 1 #默认参数:变化比较小的,经常使用。不用传值(非传也行)
 2 
 3 def foo(x,y=1):  # y=1 为 默认参数
 4     print(x)
 5     print(y)
 6 
 7 foo(1)
 8 
 9 #结果
10 1
11 1

 

 

 

默认参数必须注意的问题是:默认参数必须放到位置参数的后面

 

5.参数组

B. 有参函数与无参函数的角度

无参函数:通常 不需有 返回值。它内部通常只是些语句

有参函数:通常要 有 返回值

 

 1 def foo():              #无参函数
 2     print(from the foo)
 3 
 4 def bar(x,y):           #有参函数
 5     print(from bar)
 6     res = x+y
 7     return res  #相当于 return 3
 8 
 9 bar(1,2)
10 n = bar(1,2)  #n=3,此处的 n,相当于 res所代表的 3
11 print(n)    



 

*args 与 **kwargs的使用(其实是 *与** 的使用)

1.*args

 1 #例一
 2 #      *args
 3 def foo(x,*args):
 4     print(x)
 5     print(args)
 6 
 7 foo(1,2,3,4,5)
 8 
 9 #输出结果
10 1
11 (2, 3, 4, 5)
12 
13 
14 ##例二: *args与位置参数和默认参数的混用
15 def foo(x,*args,y=1):
16     print(x)
17     print(args)
18     print(y)
19 
20 foo(1,2,3,4,5,y=333333)
21 
22 # #输出结果
23 1
24 (2, 3, 4, 5)
25 333333

 

2.**kwargs

 

 

 1 #  **kwargs
 2 def foo(x,*args,**kwargs):
 3     print(x)
 4     print(args)
 5     print(kwargs)
 6 
 7 foo(1,y=1,z=2)
 8 
 9 #输出结果
10 1
11 ()         #元组形式
12 {y: 1, z: 2}

 

 

 


 

 

return语句

return [表达式] 语句用于退出函数,选择性地向调用方返回一个表达式。

1.没有 return

1 def foo():
2     print(from the foo)
3 
4 res = foo()
5 print(res)
6 
7 #返回值
8 from the foo
9 None   #None,也是返回值

 

 

2.有 return ,返回一个值

 1 #有return:返回一个值
 2 def my_max(x,y):
 3     res = x if x > y else y
 4     return res
 5 
 6 res1 = my_max(1,2)
 7 print(res1)
 8 
 9 
10 #返回结果
11 2

2.有 return ,返回多个值

 1 #有return:返多个值
 2 
 3 def bar(x,y):
 4     return 333,666,111,[11,22],{a:3} #可返回多个值,任意类型的值(会以 元组形式出现)
 5 
 6 res2 =  bar(1,2)
 7 print(res2)
 8 
 9 #返回结果
10 
11 (333, 666, 111, [11, 22], {a: 3})  #元组

 


 


嵌套函数和作用域

1.嵌套定义

 1 #####例一
 2 
 3 x = 33333333333333
 4 def f1():
 5     x = 1
 6     print(------>f1 ,x)
 7     def f2():
 8         x=2
 9         print(---->f2 ,x)
10         def f3():
11             x=3      
12             print(-->f3 ,x)
13         f3()
14     f2()
15 f1()
16 
17 #运行结果
18 
19 ------>f1 1
20 ---->f2 2
21 -->f3 3
22 
23 
24 
25 
26 
27 ######## 例二
28 
29 x = 33333333333333
30 def f1():
31     #x = 1             #此表达式 选择 不执行
32     print(------>f1 ,x)
33     def f2():
34         #x=2          #此表达式 选择 不执行
35         print(---->f2 ,x)
36         def f3():
37             #x=3      #此表达式 选择 不执行
38             print(-->f3 ,x)
39         f3()
40     f2()
41 f1()
42 
43 #运行结果
44 ------>f1  33333333333333
45 ---->f2  33333333333333
46 -->f3  33333333333333

 

2,嵌套调用


 1 def my_max(x,y):
 2     res=x if x > y else y
 3     return res
 4  print(my_max(10,100))
 6 
 7 
 8 def my_max4(a,b,c,d):     
 9     res1 = my_max(a,b)
10     res2 = my_max(res1,c)
11     res3 = my_max(res2,d)
12     return res3
13 print(my_max4(1,20,3,4))
14 
15 
16 #输出的结果
17 100       #print(my_max(10,100))的结果
18 20         #print(my_max4(1,20,3,4))的结果

 

作业:

1.对 haproxy.conf文件进行,增删改查

 

 

技术分享
global
        log 127.0.0.1 local2
        daemon
        maxconn 256
        log 127.0.0.1 local2 info

defaults
        log global
        mode http
        timeout connect 5000ms
        timeout client 50000ms
        timeout server 50000ms
        option  dontlognull

listen  stats :8888
        stats enable
        stats uri       /admin
        stats auth      admin:1234

frontend oldboy.org
         bind 0.0.0.0:80
         option httplog
         option httpclose
         option  forwardfor
         log global
         acl www hdr_reg(host) -i www.oldboy.org
         use_backend www.oldboy.org if www

backend www.oldboy1.org
        server 10.10.0.10 10.10.0.10 weight 9999 maxconn 33
        server 10.10.10.1 10.10.10.1 weight 22   maxconn 2000
        server 2.2.2.4 2.2.2.4       weight 20   maxconn 3000

backend www.oldboy2.org
        server 3.3.3.3 3.3.3.3 weight 20 maxconn 3000

backend www.oldboy20.org
        server 10.10.0.10 10.10.0.10 weight 9999 maxconn 33


data=input():    {"backend":"www.oldboy1.org","record":{server:...,weight:...,maxconn:...
haproxy.conf  文件

 

                                                                             作业内容

 

技术分享
 1 def check(backend):
 2       ‘‘‘核查功能‘‘‘
 3     flag = False
 4     check_list = []
 5     with open(haproxy.conf) as f:
 6         for line in f:
 7             if line.startswith(backend):
 8                 if backend == line.strip().split()[1]:
 9                     flag = True
10                     continue
11                 if flag and line,strip().startswith(backend):
12                     break
13                 if flag and line.strip():
14                     check_list.append(line.strip())
15     return check_list
16 
17 
18 def fun_edit(user_input,tag = False):
19     ‘‘‘本函数完成的功能是修改功能‘‘‘
20     with open(filename,encoding="utf-8") as f_source,open("haproxy.dst",mode="w+",encoding="utf-8") as f_dst:
21         for line in f_source:
22             if line.startswith("backend") and user_input in line:
23                 tag = True
24                 continue
25             if tag and line.startswith("backend"):
26                 break
27             if tag:
28                 list_search.append(line.strip())
29         f_source.seek(0)
30         tag = False
31         while True:
32             for i,l in enumerate(list_search,1):
33                 print(i,l)
34             choice = input("请输入需要修改内容的编号:")
35             if choice.isdigit():
36                 choice = int(choice)-1
37                 if choice < len(list_search) and choice >=0:
38                     old_record = list_search[choice].strip()
39                     print("您要修改的内容为:%s"%old_record)
40                     new_record = input("请您输入新的内容:").strip()
41                     for line in f_source:
42                         if line.startswith("backend") and user_input in line:
43                             tag = True
44                             f_dst.write(line)
45                             continue
46                         if tag and line.strip() == old_record:
47                             f_dst.write("        %s\n"%new_record)
48                             continue
49                         f_dst.write(line)
50                         f_dst.flush()
51                     else:
52                         break
53                 else:
54                     print("您输入的内容有误,请重新输入!!")
55                     continue
56     fun_file_bak(filename)怎山
增删改查

 

 

 

 

 

                                            

 

 

Python 函数