1.函数 2种编程方法              关键词
面向对象:华山派 ---》》 类-----》class
面向过程:少林派 -—》》 过程---》def
函数式编程:逍遥派 -—》》函数---》def

函数的定义:x自变量 y因变量 y是x的函数
编程语言中的函数定义:函数是逻辑结构化和过程化的一种编程方法
python中函数定义方法:
 #!/usr/bin/env python
 #_*_coding:utf-8_*_

 def test(x):
     "The function definitions"
     x+=1
     return x
def:定义函数的关键字
test:函数名
():内可定义形参
"":文档描述(非必要,但是强烈建议为你的函数添加描述信息)
x+=1:泛指代码块或程序处理逻辑
return:定义返回值

2.看下面2个列子
 #!/usr/bin/env python
 #_*_coding:utf-8_*_

 def func1():
     #testing1
     pring("in the func1")
     return 0
 def func2():
     #testing2
 pring("in the func2")
 x=func1()
 y=func2()
 pring("form func1 return is $s" % x)  结果0
 pring("form func2 return is $s" % y)  结果none
过程和函数都可以被调用 实体,过程实际上就是没有返回值的函数
func1 函数式编程
func2 面向过程 就是一段段功能逻辑包含到def当中,通过函数名来调用的过程
为什么使用函数:
http://egon09.blog.51cto.com/9161406/1834777 例子可以访问
函数重复利用
函数一致性
函数扩展性

3.函数的返回值 return
可以返回 对象 true false 元祖 字典
什么要有返回值,这个函数整个执行的结果,后面其他的逻辑要根据前一个逻辑返回的结果来继续不同操作

4.看下面代码
 #!/usr/bin/env python
 #_*_coding:utf-8_*_

 def test(x,y):
     print(x)
     print(y)
 test(1,2) 位置关系调用,与形参一一对应
1 2 叫做实参    实际存在的,占用空间的
x y 叫做形参 (也是位置参数)
test(y=1,x=1) 关键字调用,与形参数续无关
既有关键字又有位置关系调用,会按照位置关系调用
关键字参数不能写位置关系前面

5.默认参数
 #!/usr/bin/env python
 #_*_coding:utf-8_*_

 def test(x,y=2):
     print(x)
     print(y)
 test(1,3/y=3)
用途!一些默认值得地方
特点!调用函数的时候,默认参数可有可无非必须传递

6.参数组
因为这里功能比较多,所以写入了一个Code里面,后面加了注释。
 #!/usr/bin/env python
 #_*_coding:utf-8_*_

 def test(*args):     接收的位置参数,转化为元祖的形式接收不了关键字参数
     print(args)
 test(1,2,3,4,5)
 在传递多个实参的时候,形参可以用*加个随意变量名,输出来的是元组形式*就是不固定的形参
 test(*[1,2,3,4,5])   传列表    args=tuple([1,2,3,4,5])  第一种类型

 def test(**kwargs):  接收的关键字参数,转化为字典的形式
     print(kwargs['name'])
     print(kwargs['age'])
 test(name='alex',age=8,sex='f') 会把关键字k v处理
 test(**{name='alex',age=8,sex='f'})

 def test(name,**kwargs):
     print(name)
     print(kwargs)
 test('alex',age=8,sex='m') 字典参数跟位置参数结合

 def test(name,age=18,**kwargs):
     print(name)
     print(age)
     print(kwargs)
 test('alex',sex='m') 字典参数跟位置参数,默认参数结合

7.局部变量
因为这里功能比较多,所以写入了一个Code里面,后面加了注释
 #!/usr/bin/env python
 #_*_coding:utf-8_*_

 school = "oldboy"   这个就是全局变量,外面的是改变不了的
 def change_name(name):
     school = "mage"
     print("before change",name,school)
     name = "Alex li"   这个就是局部变量,这个函数就是这个变量的作用域,出了这个函数就没用了
     print("after change",name)

 print(school)
 name = "alex"
 change_name(name)
 print(name)

 默认局部变量改不了全局变量,但是也是可以的就是
 def change_name(name):
     global school     也可在这里定义全局,也可以改全局
     school = "mage"
     print("before change",name,school)
 change_name(name)
 print(school)

 *** 字符串和整数遵循局部改不了全局  但是列表 字典 集合是可以在局部改的

8.递归
因为这里功能比较多,所以写入了一个Code里面,后面加了注释
 #!/usr/bin/env python
 #_*_coding:utf-8_*_

 def calc(n):
     print(n)
     return calc(n+1)
 clac(0)    最大递归 999 不能超过
 必须有个明确的结束条件
 每次进入更深一层,问题规模相比上次递归都应有所减少
 递归效率不高,递归 层次过多会导致栈溢出
 def calc(n):
     print(n)
     if int(n/2) > 0:
         return calc( int(n/2) )
     print(">>",n)
 calc(10)
 ***二分查找  这是个找15的例子
 data = [3,5,10,1,12,14,17,11,19,20,19]
 #先变成有序的
 def binary_search(datasets,find_num):
     if len(datasets) > 0:
         middle_pos = int(len(datasets/2))
         if datasets[middle_pos] == find_num
             print("find it")
         elif datasets[middle_pos] > find_num:
             print("left inside")
             binary_search(datasets[0:middle_pos],find_num)
         else:
             print("right inside")
             binary_search(datasets[middle_pos+1:],find_num)
     else:
         pring("find not 15")

 binary_search(data,15)

9.匿名函数
因为这里功能比较多,所以写入了一个Code里面,后面加了注释
 #!/usr/bin/env python
 #_*_coding:utf-8_*_

 def calc(n):
     return n*n
 calc2 = lambda x:x*x  x相当于n   x*x相当于n*n   这一行叫做匿名函数  只能用于最简单最基本的判断
 print(calc2(8))
 print(calc(8))

 def calc(n):
     return n*2
 data = map(lambda n:n*2, range(10))   匿名函数搭配其他的方法用 相等于上下的结合起来一句
 data = map(calc,rang(10))
 for i in data:
     print(i)

 def calc(n):
     if n>5:
         print("hello")
     return n*2
 data = map(lambda n:n*2 if n>5 else n, range(10))  可以加入三元运算,其他的就不行了
 data = map(calc,rang(10))
 for i in data:
     print(i)
 data = map(lambda n:n*2 if n>5 else calc(n), range(10)) 可以调用函数,一般不要这么做,太乱

10.高阶函数
 #!/usr/bin/env python
 #_*_coding:utf-8_*_

 高阶函数   就是一个函数接收另一个函数作为参数,就叫做高阶函数
 def add(a,b,f):
     return f(a)+(b)
 res = add(3,-6,abs)
 print(res)    abs就是内置函数绝对值

11.内置参数
因为这里功能比较多,所以写入了一个Code里面,后面加了注释
 #!/usr/bin/env python
 #_*_coding:utf-8_*_

 内置函数  就是python自带的函数
 all() 判断列表的所有值是否为真
 a=[1,2,3]
 all(a)  返回真,
 a=[0,2,3]
 all(a)  返回假

 any() 列表里的任何一个值为真就为真  只有0是假 或者列表空也是假
 print(ascii("地方"))  返回unicode格式显示
 print(bin(10))  返回二进制

 b = b'abc'
 b[1]
 bytes 就是 bytes 0 - 255之间的数字 并且不能改
 bytearray  就可以改

 callable() 就是判断一个对象可以调用
 print(callable(函数名)) 返回true false

 print(chr(97)) assci 对应的关系返回a
 print(ord('a')) 返回的是97

 compile() 把文件的字符串解释成python的代码区执行  相当于import 不
 f = open("返回值.py")
 code = compile(f.read(),'','exec')
 print(code)
 exec(code)
 eval只能做数字运算的字符串

 complex()复数 没有用
 dict() 生成字典

 dir() 就是返回用法
 f = open("fanhuizhi.py,encoding="utf-8"")
 pring(dir(f))

 print(divmod(10,3))  返回地板除(3,1)

 filter()过滤
 for i in filter(lambda x:x>5,rang(10)):过滤
     print(i)

 float()浮点
 frozenset()把一个集合变成只读的
 print(globals()) 当前程序在内存里的所有程序都以字典的形式打印出来全局
 print(locals()) 打印局部的

 hex() 求16进制   pring(hex(8)) 返回0x8  0x就是16进制表示方法
 0123456789abcdef
             10 11 12 13

 id()内存地址
 print(max([]))列表里面的最大值
 min 最小
 oct()八进制   0o oct(8)返回的是 0o10
 pow(4,9)多少次方 4de 9cifang

 msg = "yiduanhua"
 f = open("tofile","w",encoding="utf-8")
 print(msg,"lingyiduanhua",sep="|",end="=",file=f)   sep分隔符 =结束符

 data = [3,5,7,4,6,4]
 data = reversed(data)
 for i in data:print(i) 反转 列表 字符串可以I的

 round()5舍6入
 print(round(10.26,1)) 1保留一个小数    五舍六入

 set()  把一个列表变成集合
 slice(3,8,1)切片 没啥用

 a = "alex"
 a = sorted(a)
 print(a)   按照assci码排序呢

 sum() 一个列表的求和 里面的数字加在一起
 print(vars()) 跟globals一样

 a = [1,3,5,7]  会对应少的来
 b = [2,4,6,8]
 for i in zip(a,b):     拉链
     print(i)




python学习道路(day4note)(函数,形参实参位置参数匿名参数,匿名函数,高阶函数,镶嵌函数)的更多相关文章

  1. 第十一篇 Python函数之定义&形参&实参&位置参数&关键字参数&可变长参数&默认参数

    函数的定义:函数是为了完成某一特定功能的,函数是逻辑结构化和过程化的一种编程方法 函数的定义格式,函数一般都是有返回值的 #语法 #函数名要能反映其意义 def 函数名(参数1,参数2,参数3,... ...

  2. 函数和常用模块【day04】:高阶函数(七)

    本节内容 1.介绍 2.具体实用 3.eval()函数 一.介绍 高阶函数:变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数. 二.具体实用 其实说白了,高阶函数功能就 ...

  3. Python学习笔记八:文件操作(续),文件编码与解码,函数,递归,函数式编程介绍,高阶函数

    文件操作(续) 获得文件句柄位置,f.tell(),从0开始,按字符数计数 f.read(5),读取5个字符 返回文件句柄到某位置,f.seek(0) 文件在编辑过程中改变编码,f.detech() ...

  4. python学习道路(day7note)(subprocess模块,面向对象)

    1.subprocess模块   因为方法较多我就写在code里面了,后面有注释 #!/usr/bin/env python #_*_coding:utf-8_*_ #linux 上调用python脚 ...

  5. python 高阶内置函数

    1.lambda 匿名函数 lambda 参数: 返回值 函数名统一都叫lambda. 2.sorted() 排序函数 排序函数 sorted(iterable,key,reverse) key:排序 ...

  6. python学习道路即将结束

    其实今天算是失眠了,所以打算整理一下自己的学习内容了! 今天是我看视频学习的第六天,已经学习到定义类和对象了,有时候回想python这门语言真的很入门吧,各种语法比较简易能懂. 入门首选 print( ...

  7. python学习道路(day11note)(协程,同步与异步的性能区别,url爬网页,select,RabbitMq)

    1.协程 #协程 又称微线程 是一种用户的轻量级线程 程序级别代码控制 就不用加机器 #不同函数 = 不同任务 A函数切到B函数没有进行cpu级别的切换,而是程序级别的切换就是协程 yelied #单 ...

  8. python学习道路(day10note)(线程,进程)

    1.计算机的发展史 看alex的博客吧,了解一下可以了 2.线程与GIL简介 #线程 #一道单一的指令的控制流,寄生在进程中 #单一进程里的多个线程是共享数据的 #多个线程涉及修改共享数据的时候需要枷 ...

  9. python学习道路(day8note)(抽象类,类的方法,异常处理,socket编程)

    1.#面向对象 #抽象接口 === 抽象类 #就是架构师给你一个架子,你们去写,如果满足不了直接报错 #python2 print("python2---抽象类".center(2 ...

随机推荐

  1. BPM业务流程管理与SAP如何更好集成整合?

    深圳市有方科技有限公司是一家专注于M2M物联网无线通信产品和服务的国家级高新技术企业.有方科技专注于无线应用需求的挖掘和实现,拥有产品规划.工业设计.结构.硬件.软件.测试.ID.物流等完整的研发及设 ...

  2. Android Handler机制(四)---Handler源码解析

    Handler的主要用途有两个:(1).在将来的某个时刻执行消息或一个runnable,(2)把消息发送到消息队列. 主要依靠post(Runnable).postAtTime(Runnable, l ...

  3. img外头包着a时底部出现的一小段高度的解决方法。图片水平垂直居中用css解决的方法。

    <a><img/></a> 这种结构有时候在界面预览的时候会出现一段多出来的高度.这个高度,一开始我很奇怪是什么原因产生的.鼠标移动到a标签上会有高度出现,一开始我 ...

  4. (转)ThinkPHP使用心得分享-分页类Page的用法

    转之--http://www.jb51.net/article/50138.htm ThinkPHP中的Page类在ThinkPHP/Extend/Library/ORG/Util/Page.clas ...

  5. Algorithm --&gt; 二进制中1的个数

    行文脉络 解法一——除法 解法二——移位 解法三——高效移位 解法四——查表 扩展问题——异或后转化为该问题 对于一个字节(8bit)的变量,求其二进制“1”的个数.例如6(二进制0000 0110) ...

  6. Day16 Django

    学Django之前,先看下http基础,老师的网页地址: web框架 - Yuan先生 - 博客园 http://www.cnblogs.com/yuanchenqi/articles/7690561 ...

  7. com.mysql.jdbc.Driver 与 org.gjt.mm.mysql.Driver的区别

    com.mysql.jdbc.Driver的前身是org.gjt.mm.mysql.Driver,现在主要用com.mysql.jdbc.Driver,但为了保持兼容性保留了org.gjt.mm.my ...

  8. JS数组冒泡排序&amp;去重

    冒泡排序: var a = [2,1,4,3,6,5]; for(var d = 0 ; d< a.length; d++){ for(var b = d+1; b < a.length; ...

  9. AD账号解锁

    Get-ADUser -Filter * -Properties *  -SearchBase "dc=uxin,dc=youxinpai,dc=com"| ? {$_.locke ...

  10. 【Spring学习笔记-MVC-12】Spring MVC视图解析器之ResourceBundleViewResolver

    场景 当我们设计程序界面的时候,中国人希望界面是中文,而美国人希望界面是英文. 我们当然希望后台代码不需改变,系统能够通过配置文件配置,来自己觉得是显示中文界面还是英文界面. 这是,Spring mv ...