python学习道路(day4note)(函数,形参实参位置参数匿名参数,匿名函数,高阶函数,镶嵌函数)
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)(函数,形参实参位置参数匿名参数,匿名函数,高阶函数,镶嵌函数)的更多相关文章
- 第十一篇 Python函数之定义&形参&实参&位置参数&关键字参数&可变长参数&默认参数
函数的定义:函数是为了完成某一特定功能的,函数是逻辑结构化和过程化的一种编程方法 函数的定义格式,函数一般都是有返回值的 #语法 #函数名要能反映其意义 def 函数名(参数1,参数2,参数3,... ...
- 函数和常用模块【day04】:高阶函数(七)
本节内容 1.介绍 2.具体实用 3.eval()函数 一.介绍 高阶函数:变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数. 二.具体实用 其实说白了,高阶函数功能就 ...
- Python学习笔记八:文件操作(续),文件编码与解码,函数,递归,函数式编程介绍,高阶函数
文件操作(续) 获得文件句柄位置,f.tell(),从0开始,按字符数计数 f.read(5),读取5个字符 返回文件句柄到某位置,f.seek(0) 文件在编辑过程中改变编码,f.detech() ...
- Python - 函数形参之必填参数、缺省参数、可变参数、关键字参数的详细使用
Python函数形参 必传参数:平时最常用的,必传确定数量的参数 缺省参数:在调用函数时可以传也可以不传,如果不传将使用默认值 可变参数:可变长度参数 关键字参数:长度可变,但是需要以kv对形式传参 ...
- python学习道路(day7note)(subprocess模块,面向对象)
1.subprocess模块 因为方法较多我就写在code里面了,后面有注释 #!/usr/bin/env python #_*_coding:utf-8_*_ #linux 上调用python脚 ...
- python 高阶内置函数
1.lambda 匿名函数 lambda 参数: 返回值 函数名统一都叫lambda. 2.sorted() 排序函数 排序函数 sorted(iterable,key,reverse) key:排序 ...
- python学习道路即将结束
其实今天算是失眠了,所以打算整理一下自己的学习内容了! 今天是我看视频学习的第六天,已经学习到定义类和对象了,有时候回想python这门语言真的很入门吧,各种语法比较简易能懂. 入门首选 print( ...
- python学习道路(day11note)(协程,同步与异步的性能区别,url爬网页,select,RabbitMq)
1.协程 #协程 又称微线程 是一种用户的轻量级线程 程序级别代码控制 就不用加机器 #不同函数 = 不同任务 A函数切到B函数没有进行cpu级别的切换,而是程序级别的切换就是协程 yelied #单 ...
- python学习道路(day10note)(线程,进程)
1.计算机的发展史 看alex的博客吧,了解一下可以了 2.线程与GIL简介 #线程 #一道单一的指令的控制流,寄生在进程中 #单一进程里的多个线程是共享数据的 #多个线程涉及修改共享数据的时候需要枷 ...
随机推荐
- python pickle
>>> import pickle >>> m_list=[',2,'asa'] >>> m_list [', 2, 'asa'] >> ...
- 数据库Sharding的基本思想和切分策略
一.基本思想 Sharding的基本思想就要把一个数据库切分成多个部分放到不同的数据库(server)上,从而缓解单一数据库的性能问题.不太严格的讲,对于海量数据的数据库,如果是因为表多而数据多,这时 ...
- [转]MySQL 最基本的SQL语法/语句
MySQL 最基本的SQL语法/语句,使用mysql的朋友可以参考下. DDL-数据定义语言(Create,Alter,Drop,DECLARE) DML-数据操纵语言(Select,Delete ...
- nginx访问不了zabbix安装配置界面
通过yum安装的php等其他各种软件,配置好后,html目录下面php可以解析,但是就是访问不到setup.php文件.后来各种查找,发现是setup解析错误 PHP Parse error: sy ...
- LeetCode 118 Pascal's Triangle
Problem: Given numRows, generate the first numRows of Pascal's triangle. For example, given numRows ...
- initrd image比lvm.conf文件舊導致RHCS切換服務unmount failed,reboot
在RHCS服務切換的時候,unmount盤的時候,發現會failed,並且直接導致reboot. 在message里看到這樣一段 [lvm] * initrd image needs to be ne ...
- 转--脉络清晰的BP神经网络讲解,赞
http://www.cnblogs.com/wengzilin/archive/2013/04/24/3041019.html 学 习是神经网络一种最重要也最令人注目的特点.在神经网络的发展进程中, ...
- Daily Scrum Meeting ——SixthDay
一.Daily Scrum Meeting照片 佳恺请假了...可能去约会了罢 二.Burndown Chart 欣慰,但是还是感到"鸭梨山大"! 三.项目进展 1.活动列表查询功 ...
- erlang mac os 10.9 卸载脚本
#!/bin/bash if [ "$(id -u)" != "0" ]; then echo "Insufficient permissions. ...
- wampserver的安装以及使用
一.点击wampserver.exe默认安装 二.安装成功之后测试 (1)测试基本配置 浏览器地址栏输入http://localhost/index.php ...