D03——C语言基础学习PYTHON
C语言基础学习PYTHON——基础学习D03
20180804内容纲要:
1 函数的基本概念
2 函数的参数
3 函数的全局变量与局部变量
4 函数的返回值
5 递归函数
6 高阶函数
7 匿名函数
8 函数式编程
9 小结
10 小练习:ATM+购物车程序
1 函数的基本概念
a 函数定义
b 函数特性
c 定义函数
a 定义:函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可。
b 特性:
- 减少重复代码
- 使程序变的可扩展
- 使程序变得易维护
c:语法
def定义函数的关键字
func1 函数名
():内定义形参
注释:文档描述(非必要,但是强烈建议为函数添加描述信息)
代码块
return返回值
'''
函数定义语法
~据说函数式编程和面向过程有点像。貌似是过程是没有返回值的函数
#函数
def func2():
'''the function definitions'''
print('in the func2')
return 0
#过程
def func3():
'''the function definitions'''
print('in the func3') x=func2()
y=func3()
print('from func2 return is %s'%x)
print('from func3 return is %s'%y)
要不要看一眼
2 函数的参数
a 形参实参
b 默认参数
c 关键字参数
d 非固定参数
a 形参实参
#Author:ZhangKanghui def multi(x,y): #x,y形参
res =x**y
return res
a =multi(3,4) #3,4实参
print(a)
这个很容易理解
b 默认参数
def info(name,age,contry="China"):
这样,country这个参数在调用时不指定就用默认值,指定的话就用指定值。
c 关键字参数
def info(name,age,country="China"):
print ("————info————")
print ("姓名:",name)
print ("年龄:",age)
print("国籍:",country) info(age=23,name='Zhangkanghui')
info(age=23,name='Zhangkanghui',country='CN')
也能感受到默认参数
Note:函数传参数要按顺序,不想按顺序就可以用关键参数,只需指定参数名即可,但记住一个要求就是,关键参数必须放在位置参数之后。
#关键字参数必须在位置参数后面
def func_name(arg1,arg2,arg3):
pass func_name(arg1=9,arg3=6,3)
# SyntaxError: positional argument follows keyword argument
view code
d 非固定参数
函数在定义时不确定用户想传入多少个参数,就可以使用非固定参数
- *args会把传入的参数组成一个元组
- *kwargs会把传入的参数组成一个字典
def info(name,age,*args): # *args 会把多传入的参数变成一个元组形式
print(name,age,args) info("Kanghui",22)
#输出
#Kanghui 22 () #后面这个()就是args,只是因为没传值,所以为空 info("Jack",32,"CN","Python")
#输出
# Jack 32 ('CN', 'Python')
*args
def info(name,age,*args,**kwargs): # *kwargs 会把多传入的参数变成一个dict形式
print(name,age,args,kwargs) info("Kanghui",22)
#输出
#Kanghui 22 () {}#后面这个{}就是kwargs,只是因为没传值,所以为空 info("Jack",32,"CN","Python",sex="Male",province="ShanDong")
#输出
# Jack 32 ('CN', 'Python') {'province': 'ShanDong', 'sex': 'Male'}
*kwargs
3 函数的全局变量和局部变量
全局变量和局部变量
作用域不同:
#Author:ZhangKanghui name = "Kanghui" def change_name(name):
print("before change:", name)
name = "kanghui"
print("after change", name)
change_name(name)
print("在外面看看name改了么?", name)
看完代码你就明白了
#Author:ZhangKanghui
#全局变量与局部变量的访问顺序
x=0
def gandpa():
x=1
def dad():
x=2
def son():
x=3
print(x)
son()
dad()
gandpa()
关于局部变量和全局变量的访问顺序
4 函数的返回值
无return->None
return 1个值->返回1个值
return 逗号分隔多个值->元组
返回值有什么用?
调用函数,经过一系列的操作,最后要拿到一个明确的结果,则必须要有返回值
通常有参函数需要有返回值,输入参数,经过计算,得到一个最终的结果
函数在执行过程中只要遇到return语句,就会停止执行并返回结果, return 语句代表着函数的结束。
5 递归函数
在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。
#其实我觉得就是类似于迭代
def calc(n):
print(n)
if int(n/2)==0:
return n
return calc(int(n/2))
calc(10)
递归是怎么回事呢?
递归特性:
1. 必须有一个明确的结束条件,不然就进入无限循环状态,当然不会真的无限循环,系统默认999次。
3. 递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出)
堆栈扫盲 http://www.cnblogs.com/lln7777/archive/2012/03/14/2396164.html 或者点击这里
递归函数实际应用案例:二分查找
6 高阶函数
一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数。下一节会有更详细的讲解和应用。配合嵌套函数完成生成器的功能。
#函数的变量参数还是个函数
def add(x,y,f):
return f(x)+f(y) a =add(3,-6,abs)
print(a)
高阶函数
7 匿名函数
不需要显实的定义函数。
calc =lambda x:x*3
print(calc(3))
但是,只能支持一些比较简单的函数运算。稍微复杂一些也是极限了。
calc2 =lambda m: 3 if m<4 else m
print(calc2(5))
不过匿名函数主要是和其它函数搭配使用的。
(lambda n:print(n))(5)
print(lambda n:print(n)(5))
print(lambda n:print(n)) print(filter(lambda n:n>5, range(10)))
res1 =filter(lambda n:n>5, range(10))
for i in res1:
print(i)
res2 =map(lambda n:n*2,range(10)) #列表生成式[i*2 for i in range(10)]
#res2 =[lambda i:i*2 for i in range(10)]
for i in res2:
print(i)
关于匿名函数的一些其他用法
import functools
res3 =functools.reduce(lambda x,y:x+y,range(10)) #累加
print(res3) res4 =functools.reduce(lambda x,y:x*y,range(1,9)) #阶乘
实现累加和阶乘
8 函数式编程
函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数调用,就可以把复杂任务分解成简单的任务,这种分解可以称之为面向过程的程序设计。
函数就是面向过程的程序设计的基本单元。 举例来说:如果有一个数学表达式是这样的:
(1+2)*3-4
传统的编程过程可能会这样写:
var a =1+2
var b =a*3
var c =b-4
函数式编程要求使用函数,然后就写成下面这个样子:
var res =subtract(multiply(add(1,2),3),4)
要想学好函数式编程,不要玩py,玩Erlang,Haskell, 好了!
9 小结
函数就是逻辑结构化和过程化,将一些常用的功能编程封装成一个函数,需要时调用即可。就是将特殊化转变成一般化。
这种思维方式在很多地方都能见到,最常见的比如短信的快速回复。预先设置好,需要时即可拿出用。
·
还能坚持下去吗?
10 练习(ATM)
需求:
模拟一个ATM+购物商城的小程序
1 额度15000或者自定
2 实现购物商城,买东西加入购物车,调用信用卡借口结账
3 可以提现,手续费5%
4 每月22出账单,每月10号为还款日,过期未还,按欠款额度万分之五按日计息
5 支持多账户登录
6 支持账户间转账
7 记录每月日常消费流水
8 提供还款接口
9 ATM记录操作日志
10 提供管理接口,包括添加账户,用户额度,冻结账户等
11 用户认证装饰器
简易流程图:https://www.processon.com/view/link/589eb841e4b0999184934329
示例代码: https://github.com/triaquae/py3_training/tree/master/atm
反正我这种小白是看不懂~!等以后再说吧,以后的以后~
这是尾巴~
这里推荐一个链接:。 https://mp.weixin.qq.com/s/ey7kR34xbDJR9E1ypEkMHQ
这是十七个学习网站,值得你去浪费时光~点击这里
D03——C语言基础学习PYTHON的更多相关文章
- D17——C语言基础学PYTHON
C语言基础学习PYTHON——基础学习D17 20181014内容纲要: 1.jQuery介绍 2.jQuery功能介绍 (1)jQuery的引入方式 (2)选择器 (3)筛选 (4)文本操作 (5) ...
- D16——C语言基础学PYTHON
C语言基础学习PYTHON——基础学习D16 20180927内容纲要: 1.JavaScript介绍 2.JavaScript功能介绍 3.JavaScript变量 4.Dom操作 a.获取标签 b ...
- D15——C语言基础学PYTHON
C语言基础学习PYTHON——基础学习D15 20180926内容纲要: 1.CSS介绍 2.CSS的四种引入方式 3.CSS选择器 4.CSS常用属性 5.小结 6.练习 1 CSS介绍 层叠样式表 ...
- D14——C语言基础学PYTHON
C语言基础学习PYTHON——基础学习D14 20180919内容纲要: 1.html认识 2.常用标签 3.京东html 4.小结 5.练习(简易淘宝html) 1.html初识(HyperText ...
- D13——C语言基础学PYTHON
C语言基础学习PYTHON——基础学习D13 20180918内容纲要: 堡垒机运维开发 1.堡垒机的介绍 2.堡垒机的架构 3.小结 4.堡垒机的功能实现需求 1 堡垒机的介绍 百度百科 随着信息安 ...
- D12——C语言基础学PYTHON
C语言基础学习PYTHON——基础学习D12 20180912内容纲要: 1.数据库介绍 2.RDMS术语 3.MySQL数据库介绍和基本使用 4.MySQL数据类型 5.MySQL常用命令 6.外键 ...
- D11——C语言基础学PYTHON
C语言基础学习PYTHON——基础学习D11 20180908内容纲要: 1.RabbitMQ消息队列 (1)RabbitMQ安装 (2)Rabbits示例 模式一:fanout 模式二:direct ...
- D10——C语言基础学PYTHON
C语言基础学习PYTHON——基础学习D10 20180906内容纲要: 1.协程 (1)yield (2)greenlet (3)gevent (4)gevent实现单线程下socket多并发 2. ...
- D09——C语言基础学PYTHON
C语言基础学习PYTHON——基础学习D09 20180903内容纲要: 线程.进程 1.paramiko 2.线程.进程初识 3.多线程 (1)线程的调用方式 (2)join (3)线程锁.递归锁. ...
随机推荐
- Quartz教程三:Job与JobDetail介绍
Quartz教程三:Job与JobDetail介绍 原文链接 | 译文链接 | 翻译:nkcoder | 校对: 本系列教程由quartz-2.2.x官方文档翻译.整理而来,希望给同样对quartz感 ...
- delphi XE7 数组操作中缺少的find(POS)功能
delphi xe7 中对数组操作做了很多扩充,比如加入了类似字符串处理的功能. 例如,数组相加 var A: array of integer; B: TBytes = [1,2,3,4]; //I ...
- 2018.10.08 NOIP模拟 栅栏(树状数组+rand)
传送门 今天的送分题. 首先考虑每次给要围上栅栏的矩阵里的整体加上1,如果栅栏被撤销就整体减1,最后比较两个点的值是否相同来进行判断. 然而这样的效果并不理想,很容易卡掉. 进一步思考,我们第iii次 ...
- 2018.09.15 poj1041John's trip(欧拉路输出方案)
传送门 一个欧拉路输出方案的板子题. 竟然难在读入233. 代码: #include<iostream> #include<cstdio> #include<cstrin ...
- 2018.07.08 NOIP模拟 ABCD(背包)
ABCD 题目背景 SOURCE:NOIP2016-AHSDFZ T2 题目描述 有 4 个长度为 N 的数组 a,b,c,d .现在需要你选择 N 个数构成数组e ,数组e 满足 a[i]≤e[i] ...
- (连通图 模板题)迷宫城堡--hdu--1269
链接: http://acm.hdu.edu.cn/showproblem.php?pid=1269 http://acm.hust.edu.cn/vjudge/contest/view.action ...
- 图片转化为pdf(转)
方法1: 利用Adobe公司的Adobe Acrobat Professional进行转化.注意,一定是Professional版本的,Reader版本没有这个功能. 首先安装Adobe Acrob ...
- Delphi Language Overview
Delphi is a high-level, compiled, strongly typed language that supports structured and object-orient ...
- Delphi 中 FindWindow 和 FindWindowEx 的语法和用法
FindWindow(lpClassName, {窗口的类名}lpWindowName: PChar {窗口的标题}): HWND; {返回窗口的句柄; 失败返 ...
- const 用法全面总结
C++中的const关键字的用法非常灵活,而使用const将大大改善程序的健壮性,本人根据各方面查到的资料进行总结如下,期望对朋友们有所帮助. Const 是C++中常用的类型修饰符,常类型是指使用类 ...