D03——C语言基础学习PYTHON

C语言基础学习PYTHON——基础学习D02

20180804内容纲要:

  1 函数的基本概念

  2 函数的参数

  3 函数的全局变量与局部变量

  4 函数的返回值

  5 递归函数

  6 高阶函数

  7 匿名函数

  8 函数式编程

  9 小结

  10 小练习:ATM+购物车程序

1 函数的基本概念

  a 函数定义

  b 函数特性

  c 定义函数

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

b 特性:

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

c:语法

1 def定义函数的关键字
2 func1 函数名
3 ():内定义形参
4 注释:文档描述(非必要,但是强烈建议为函数添加描述信息)
5 代码块
6 return返回值
7 ‘‘‘

函数定义语法

~据说函数式编程和面向过程有点像。貌似是过程是没有返回值的函数

 1 #函数
 2 def func2():
 3     ‘‘‘the function definitions‘‘‘
 4     print(‘in the func2‘)
 5     return 0
 6 #过程
 7 def func3():
 8     ‘‘‘the function definitions‘‘‘
 9     print(‘in the func3‘)
10
11 x=func2()
12 y=func3()
13 print(‘from func2 return is %s‘%x)
14 print(‘from func3 return is %s‘%y)

要不要看一眼

2 函数的参数

  a 形参实参

  b 默认参数

  c 关键字参数

  d 非固定参数

a 形参实参

1 #Author:ZhangKanghui
2
3 def multi(x,y):         #x,y形参
4     res =x**y
5     return res
6 a =multi(3,4)           #3,4实参
7 print(a)

这个很容易理解

b 默认参数

1 def info(name,age,contry="China"):

这样,country这个参数在调用时不指定就用默认值,指定的话就用指定值。

c 关键字参数

1 def info(name,age,country="China"):
2     print ("————info————")
3     print ("姓名:",name)
4     print ("年龄:",age)
5     print("国籍:",country)
6
7 info(age=23,name=‘Zhangkanghui‘)
8 info(age=23,name=‘Zhangkanghui‘,country=‘CN‘)

也能感受到默认参数

Note:函数传参数要按顺序,不想按顺序就可以用关键参数,只需指定参数名即可,但记住一个要求就是,关键参数必须放在位置参数之后。

d 非固定参数

  函数在定义时不确定用户想传入多少个参数,就可以使用非固定参数

  • *args会把传入的参数组成一个元组
  • *kwargs会把传入的参数组成一个字典

 1 def info(name,age,*args): # *args 会把多传入的参数变成一个元组形式
 2     print(name,age,args)
 3
 4 info("Kanghui",22)
 5 #输出
 6 #Kanghui 22 () #后面这个()就是args,只是因为没传值,所以为空
 7
 8 info("Jack",32,"CN","Python")
 9 #输出
10 # Jack 32 (‘CN‘, ‘Python‘)

*args

 1 def info(name,age,*args,**kwargs): # *kwargs 会把多传入的参数变成一个dict形式
 2     print(name,age,args,kwargs)
 3
 4 info("Kanghui",22)
 5 #输出
 6 #Kanghui 22 () {}#后面这个{}就是kwargs,只是因为没传值,所以为空
 7
 8 info("Jack",32,"CN","Python",sex="Male",province="ShanDong")
 9 #输出
10 # Jack 32 (‘CN‘, ‘Python‘) {‘province‘: ‘ShanDong‘, ‘sex‘: ‘Male‘}

*kwargs

3 函数的全局变量和局部变量

全局变量和局部变量

作用域不同:

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

当全局变量与局部变量同名时:在定义局部变量的子程序内,局部变量起作用;在其它地方全局变量起作用。

 1 #Author:ZhangKanghui
 2
 3 name = "Kanghui"
 4
 5 def change_name(name):
 6     print("before change:", name)
 7     name = "kanghui"
 8     print("after change", name)
 9 change_name(name)
10 print("在外面看看name改了么?", name)

看完代码你就明白了

 1 #Author:ZhangKanghui
 2 #全局变量与局部变量的访问顺序
 3 x=0
 4 def gandpa():
 5     x=1
 6     def dad():
 7         x=2
 8         def son():
 9             x=3
10             print(x)
11         son()
12     dad()
13 gandpa()

关于局部变量和全局变量的访问顺序

4 函数的返回值

无return->None
return 1个值->返回1个值
return 逗号分隔多个值->元组

返回值有什么用?

    调用函数,经过一系列的操作,最后要拿到一个明确的结果,则必须要有返回值
    通常有参函数需要有返回值,输入参数,经过计算,得到一个最终的结果

函数在执行过程中只要遇到return语句,就会停止执行并返回结果, return 语句代表着函数的结束。

5 递归函数

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

1 #其实我觉得就是类似于迭代
2 def calc(n):
3     print(n)
4     if int(n/2)==0:
5         return n
6     return calc(int(n/2))
7 calc(10)

递归是怎么回事呢?

递归特性:

1. 必须有一个明确的结束条件,不然就进入无限循环状态,当然不会真的无限循环,系统默认999次。

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

堆栈扫盲   http://www.cnblogs.com/lln7777/archive/2012/03/14/2396164.html     或者点击这里

递归函数实际应用案例:二分查找

6 高阶函数

一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数。下一节会有更详细的讲解和应用。配合嵌套函数完成生成器的功能。

1 #函数的变量参数还是个函数
2 def add(x,y,f):
3     return f(x)+f(y)
4
5 a =add(3,-6,abs)
6 print(a)

高阶函数

7 匿名函数

不需要显实的定义函数。
1 calc =lambda x:x*3
2 print(calc(3))

但是,只能支持一些比较简单的函数运算。稍微复杂一些也是极限了。

1 calc2 =lambda m: 3 if m<4 else m
2 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)

关于匿名函数的一些其他用法

1 import functools
2 res3 =functools.reduce(lambda x,y:x+y,range(10))            #累加
3 print(res3)
4
5 res4 =functools.reduce(lambda x,y:x*y,range(1,9))           #阶乘

实现累加和阶乘

8 函数式编程
函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数调用,就可以把复杂任务分解成简单的任务,这种分解可以称之为面向过程的程序设计。函数就是面向过程的程序设计的基本单元。

举例来说:如果有一个数学表达式是这样的:
1 (1+2)*3-4

传统的编程过程可能会这样写:

1 var a =1+2
2 var b =a*3
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

这是十七个学习网站,值得你去浪费时光~点击这里

原文地址:https://www.cnblogs.com/zhangkanghui/p/9418654.html

时间: 2024-08-07 10:03:16

D03——C语言基础学习PYTHON的相关文章

D02——C语言基础学PYTHON

C语言基础学习PYTHON--基础学习D02 20180801内容纲要: 1 字符串的系列操作 2 集合 3  文件的读写 4 字符编码转换 5 小结 6 练习:三级菜单(有彩蛋) 1 字符串的系列操作 特性:不可修改.('str' object does not support item assignment) 支持运算:切片.索引.min().max().len()等 关于字符串的操作: #关于字符串的一些操作 ''' name = "zhang\tkanghui" print(n

D05——C语言基础学PYTHON

C语言基础学习PYTHON--基础学习D05 20180815内容纲要: 1 模块 2 包 3 import的本质 4 内置模块详解 (1)time&datetime (2)datetime (3)random (4)os (5)sys (6)json&pickle (7)shelve (8)xml (9)shutil (10)PyYaml (11)configpaser (12)hashlib (13)re 5 练习:开发一个简单的python计算器(挑战性很强) 1 模块 模块: &g

D08——C语言基础学PYTHON

语言基础学习PYTHON--基础学习D08 20180829内容纲要: socket网络编程 1  socket基础概念 2  socketserver 3  socket实现简单的SSH服务器端和客户端 4  粘包 5  小结 6 练习 0  我是小白 先认识一些关键词: TCP(Transmission Control Protocol传输控制协议)是一种面向连接的.可靠的.基于字节流的传输层通信协议, 由IETF的RFC 793定义.在简化的计算机网络OSI模型中,它完成第四层传输层所指定

D10——C语言基础学PYTHON

C语言基础学习PYTHON--基础学习D10 20180906内容纲要: 1.协程 (1)yield (2)greenlet (3)gevent (4)gevent实现单线程下socket多并发 2.简单爬虫 3.select 4.IO多路复用 5.小结 6.练习 1 协程 协程又叫微线程,纤程.协程是一种用户态的轻量级线程.协程有自己的寄存器上下文和栈.协程调度切换时,将寄存器上下文.和栈保存到其他地方,在切换回来的时候回复先前保存的寄存器上下文和栈.协程能保存上一次调用时的状态.一个cpu支

D13——C语言基础学PYTHON

C语言基础学习PYTHON--基础学习D12 20180918内容纲要: 堡垒机运维开发 1.堡垒机的介绍 2.堡垒机的架构 3.小结 4.堡垒机的功能实现需求 1 堡垒机的介绍 百度百科 随着信息安全的快速发展,来自内部的安全威胁日益增多,综合防护.内部威胁防护等思想越来越受到重视,而各个层面的政策合规,如"萨班斯法案"."信息系统等级保护"等等也纷纷对运维人员的操作行为审计提出明确要求.堡垒机作为运维安全审计产品将成为信息系统安全的最后一道防线,其作用也将越来越

D16——C语言基础学PYTHON

C语言基础学习PYTHON--基础学习D15 20180927内容纲要: 1.JavaScript介绍 2.JavaScript功能介绍 3.JavaScript变量 4.Dom操作 a.获取标签 b.标签操作 c.创建标签 d.提交表单 e.事件操作 f.事件的捕捉与冒泡 5.js语法分析 6.小结 7.练习 1 JavaScript介绍 JavaScript是一种基于对象和事件驱动并具有相对安全性的客户端脚本语言.同时也是一种广泛用于客户端Web开发的脚本语言,常用来给HTML网页添加动态功

D17——C语言基础学PYTHON

C语言基础学习PYTHON--基础学习D17 20181014内容纲要: 1.jQuery介绍 2.jQuery功能介绍 (1)jQuery的引入方式 (2)选择器 (3)筛选 (4)文本操作 (5)样式操作 (6)属性操作 (7)文本处理 (8)css处理 (9)位置 (10)事件 (11)jQuery扩展 3.实例展示 4.小结 5.推荐 1 jQuery介绍 jQuery是一个快速.简洁的JavaScript框架,是继Prototype之后又一个优秀的JavaScript代码库(或Java

D01-R语言基础学习

R语言基础学习——D01 20190410内容纲要: 1.R的下载与安装 2.R包的安装与使用方法 (1)查看已安装的包 (2)查看是否安装过包 (3)安装包 (4)更新包 3.结果的重用 4.R处理大数据集 5.R的数据结构 (1)向量 (2)矩阵 (3)数组 (4)数据框 (5)列表 6.实例演练 7.小结 1 R的下载与安装 R是用于统计分析.绘图的语言和操作环境.R是属于GNU系统的一个自由.免费.源代码开放的软件,它是一个用于统计计算和统计制图的优秀工具. 学习它那就先下载它!话不多说

零基础学习Python需要用什么开发工具?

最近有不少读者私信我,这不刚开始学习Python就开始遇到难题了,对于Python IDE都比较纠结,希望找到一些适合自己的.Python开发工具.本篇给大家分享几款Python开发工具,供正在纠结用哪种开发工具的小伙伴们参考~ 对于学习Python的小伙伴,小编首推的Pycharm. 首先,PyCharm用于一般IDE具备的功能,比如, 调试.语法高亮.Project管理.代码跳转.智能提示.自动完成.单元测试.版本控制 另外,PyCharm还提供了一些很好的功能用于Django开发,同时支持