博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python运维开发之路《函数》
阅读量:5009 次
发布时间:2019-06-12

本文共 4970 字,大约阅读时间需要 16 分钟。

函数 

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

  函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内建函数,比如print()。但你也可以自己创建函数,这被叫做用户自定义函数。

  定义: 函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可

  特性:

  1. 减少重复代码
  2. 使程序变的可扩展
  3. 使程序变得易维护

定义一个函数

  语法定义:

1 def sayhi():#函数名2     print("Hello, I'm nobody!")3  4 sayhi() #调用函数

  实例:

>>> def hello() :   print("Hello World!")   >>> hello()Hello World!>>>

  带参数:

#下面这段代码a,b = 5,8c = a**bprint(c)  #改成用函数写def calc(x,y):    res = x**y    return res #返回函数执行结果 c = calc(a,b) #结果赋值给c变量print(c)

函数参数和环境变量

参数

  默认参数:

  位置参数:

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

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

  实例图:

  

默认参数

  定义:调用函数时,如果没有传递参数,则会使用默认参数。

  默认参数必须放到非默认参数(位置参数)的右面;

1 def sayHi(name,age,nationality='CN'): 2     print("Hello,I'm %s !"%name,age,nationality) 3  4 sayHi('lain','24')           #默认显示国籍为'CN' 5 sayHi('liha','22','USA')    #修改默认国籍为'USA' 6  7  8 结果: 9 Hello,I'm lain ! 24 CN10 Hello,I'm liha ! 22 USA

指定参数

  指定参数必须放在位置参数的右面;

1 def sayHi(name,age,nationality='CN'):2     print("Hello,I'm %s !"%name,age,nationality)3 4 sayHi('lain',nationality='JP',age=24)5 sayHi('liha',age=22,nationality='USA')6 7 运行结果:8 Hello,I'm lain ! 24 JP9 Hello,I'm liha ! 22 USA

非固定参数(不定长参数)

  一个函数能处理比当初声明时更多的参数。这些参数叫做不定长参数,和上述2种参数不同,声明时不会命名;

  命名规范*args,**kwargs

  元组形式:加一个星号(*)的变量名会存放所有未命名的变量参数。如果在函数调用时没有指定参数,它就是一个空元组

1 def stu_register(name, age, country, course,*heh): 2     print("----注册学生信息------") 3     print("姓名:", name) 4     print("age:", age) 5     print("国籍:", country) 6     print("课程:", course) 7     print("爱好:",*heh) 8  9 10 stu_register("张三", 22, "CN", "Python_devops",'妹纸','聊天')11 stu_register("李四", 24, "CN", "Linux","玩蛋")12 stu_register("王三炮", 25, "CN", "Oracle",'LOL')13 14 执行结果:15 ----注册学生信息------16 姓名: 张三17 age: 2218 国籍: CN19 课程: Python_devops20 爱好: 妹纸 聊天21 ----注册学生信息------22 姓名: 李四23 age: 2424 国籍: CN25 课程: Linux26 爱好: 玩蛋27 ----注册学生信息------28 姓名: 王三炮29 age: 2530 国籍: CN31 课程: Oracle32 爱好: LOL

  字典形式:加两个星号(**)的变量名会存放所有未命名的变量参数。如果在函数调用时没有指定参数,它就是一个空字典

1 def stu_register(name, age, country, course,*heh,**hah): 2     print("----注册学生信息------") 3     print("姓名:", name) 4     print("age:", age) 5     print("国籍:", country) 6     print("课程:", course) 7     print("爱好:",heh,hah) 8  9 10 stu_register("张三", 22, "CN", "Python_devops",'妹纸','聊天',stuid='134123',fee=4000)11 stu_register("李四", 24, "CN", "Linux","玩蛋")12 stu_register("王三炮", 25, "CN", "Oracle",'LOL')13 14 执行结果:15 ----注册学生信息------16 姓名: 张三17 age: 2218 国籍: CN19 课程: Python_devops20 爱好: ('妹纸', '聊天') {
'stuid': '134123', 'fee': 4000}21 ----注册学生信息------22 姓名: 李四23 age: 2424 国籍: CN25 课程: Linux26 爱好: ('玩蛋',) {}27 ----注册学生信息------28 姓名: 王三炮29 age: 2530 国籍: CN31 课程: Oracle32 爱好: ('LOL',) {}

递归函数

  定义:在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。

  递归特性:

  1. 必须有一个明确的结束条件

  2. 每次进入更深一层递归时,问题规模相比上次递归都应有所减少

  3. 递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是   无限的,所以,递归调用的次数过多,会导致栈溢出)

1 data = range(0,1000000) 2  3 def  digui(data,find): 4     if len(data) > 0: 5         middle_pos = int(len(data)/2) 6         if data[middle_pos] == find: 7             print('find_name:',find) 8         elif data[middle_pos] < find: 9             print('\033[31;1m 右边的值:%s\033[0m',data[middle_pos+1:])10             digui(data[middle_pos+1:],find)11         else:12             print('\033[32;1m 左边的值:%s\033[0m',data[0:middle_pos])13             digui(data[0:middle_pos],find)14     else:15         print('没有找到!')16 17 digui(data,451232)

环境变量

  1.函数外声明的是全局变量,函数内声明的是局部变量;

  2.全局变量作用域是整个程序,局部变量作用域是定义该变量的子程序;

  3.当全局变量与局部变量同名时:

    在定义局部变量的子程序内,局部变量起作用;在其它地方全局变量起作用。

  4.正常情况下,局部环境变量无法修改全局变量;可以使用global命令:

1 login_status=True 2 def login(): 3     #global login_status 4     login_status=False 5     if login_status==True: 6         print('login_status is True') 7     else: 8         print('login_status is False') 9 10 login()11 print(login_status)12 13 运行结果:14 #注释global15 login_status is False16 True17 #使用global18 login_status is False19 False

函数返回值  

  要想获取函数的执行结果,就可以用return语句把结果返回

  注意:

  1. 一旦函数经过调用并开始执行,那函数外部的程序,就无法再控制函数的执行过程,只能等待函数执行结果;所以return语句代表着函数的结束

  2. 如果未在函数中指定return,那这个函数的返回值为None

匿名函数

  匿名函数lambda就是不需要显式的指定函数

1 #非匿名函数2 def calc(x,y):3     runturn x*y4 print(calc(3,4))5 6 #匿名函数7 calc = lambda x,y:x*y8 print(calc(3,4))

   匿名函数搭配map()方法使用

1 def calc(n): 2      return n*n 3  4 data = map(calc,range(10)) 5  6  for i in data: 7     print(i) 8  9 ======================10 data = map(lambda n:n*n,range(10))11 print(data)12 13 data = map(lambda n:n*2,range(10))14 print(data)15 16 for i in data:17     print(i)18 19 =======================20 data = map(lambda n:n*2 if n>5 else n,range(10))21 print(data)22 23 for i in data:24     print(i)

高阶函数

  变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数。

1 def add(x,y,f):2     return f(x) + f(y)3 4 res = add(3,-6,abs)5 print(res)6 7 #x,y表示形参8 #f表示内置函数abs

 

转载于:https://www.cnblogs.com/zzlain/p/6033059.html

你可能感兴趣的文章
EXCEL工作表合并
查看>>
Prime Path
查看>>
ODAC(V9.5.15) 学习笔记(三)TOraSession(2)
查看>>
sqlyog 安装使用
查看>>
单纯形法
查看>>
SQL中的replace函数
查看>>
java中的类型安全问题-Type safety: Unchecked cast from Object to ...
查看>>
如何解决最后一个尾注引用显示与致谢混为一谈的问题-下
查看>>
Java Socket编程 - 基于TCP方式的二进制文件传输【转】http://blog.csdn.net/jia20003/article/details/8248221...
查看>>
阅读之https及加密原理
查看>>
HDOJ4550 卡片游戏 随便销毁内存的代价就是wa//string类的一些用法
查看>>
css文本样式text、字体样式font
查看>>
洛谷 P1020 导弹拦截(LIS)
查看>>
python判断图片是否损坏
查看>>
MySQL服务启动:某些服务在未由其他服务或程序使用时将自动停止
查看>>
软件工程第四周作业 - 单元测试
查看>>
KNN与SVM对比&SVM与逻辑回归的对比
查看>>
php 现在拓展地址
查看>>
【Java并发编程】之十六:深入Java内存模型——happen-before规则及其对DCL的分析(含代码)...
查看>>
团队个人冲刺第三天
查看>>