ql的python学习之路-day7
函数与函数式编程
一.编程模式分为三种:
1.面向对象编程:类----->关键字class
2.面向过程编程:过程----->关键字def,没有return
3.函数式编程:函数----->关键字def,有return返回值(注:函数式编程与我们学习的函数完全不是一回事)
面向过程编程是没有返回值的函数式编程,在python中过程可以看做函数,只是python默认过程没有返回值。
面向过程编程就是把一段段零散的代码通过def定义成一块块代码,需要调用的时候就拿出来使用。
函数式编程就是一种抽象程度很高的编程范式,纯粹的函数式编程语言编写的函数没有变量,因此任意一个函数,只要输入是确定的,输出就是确定的
python对函数式编程提供部分支持,由于python允许使用变量,所以python不是纯粹的函数式编程语言。
#!/user/bin/env python
#-*-coding:utf-8 -*-
#Author: qinjiaxi
#函数
def func1():
"""testing1"""
print('in the func1')
return 0
#过程
def func2():
"""testing2"""
print('in the func2')
x = func1()#调用函数
y = func2()#调用过程
print('func1 return: {}'.format(x))#函数有返回值返回定义函数时的0
print('func2 return: {}'.format(y))#过程没有返回值返回None
二.为什么要使用函数
1.避免代码重复(避免代码的重复,把代码封装到函数中,调用时只调用函数)
2.保持一致性(调用函数时)
3.可扩展容易扩展(修改函数时,其他调用函数的地方都跟着变动)
三.函数的返回值
1.返回值个数=0,返回None
2.返回值个数=1,返回object(本身)
3.返回值个数>1,返回tuple(元组)
四.函数为什么要有返回值
返回整个函数的运行结果,根据返回结果进行后面的操作
五.函数的参数
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:qinjiaxi #位置参数和关键字参数
def test(x,y):
print(x,y)
test(1,2)#1,2是位置参数,按照位置来传递函数参数,与形参一一对应
test(y = 1, x = 2)#此时y和x是关键字参数,将形参赋值与形参顺序无关
"其中x,y是形参,1、2是实参"
"位置参数和关键字参数共同使用的时候:必须位置参数放在前面,否则报错" #默认参数
def test1(x, y =2):
print(x,y)
test1(1)
"默认参数:在定义函数的时候给形参赋值" \
"默认参数的特点:调用函数的时候,默认参数非必须传递,如果传递就修改之前的赋值" \
"默认参数的用途:1.提前固定值,默认安装值 2.连接数据库时使用默认参数可以固定端口号" \ #参数组(也叫收集参数)
#传递多个参数
def test2(*args):
print(args)
test2(1,2,3,4,5)#接受多个实参,将参数传进去得到一个元组
test2(*[1,2,3,4,5])# args = tuple([1,2,3,4,5]) def test3(x, *args):
print(x)
print(args)
test3(1,2,3,4,5)#将1传给1,其他的以元组的形式传递给args #传递多个字典参数
def test4(**kwargs):
print(kwargs)
test4(name = 'qinlang', age = 3)#接收关键字参数变成字典
test4(**{'name': 'qinlang', 'age': ''})#kwargs = dict({'name':'qinlang', 'age':'3'})
"功能:把N个关键字参数,转换为字典的方式" def test5(name,**kwargs):
print(name)
print(kwargs)
test5('秦朗', x = 111 ,y =222, age = 8)#先接受位置参数,然后把关键字参数变成字典 def test6(name, age = 3, **kwargs):
print(name)
print(age)
print(kwargs)
test6('秦朗',hobby = 'play',age = 3.5)#先接受位置参数,然后接受默认参数,最后将关键字参数变成字典 "总结:*args接受的是位置参数,如果调用函数的时候不传递则返回一个空元组"
" *kwargs接受的是关键字参数,如果调用函数的时候不传递则返回一个空字典"
" 默认参数在调用的时候可以写可以不写,如果写的话有两种方式一是在固定位置写值、二是以关键字参数传递"
" 最后强调,位置参数一定得放在关键字参数的后面"
ql的python学习之路-day7的更多相关文章
- python学习之路-day7
本节内容: 面向对象高级语法部分 静态方法.类方法.属性方法 类的特殊方法 反射 异常处理 Socket开发基础 面向对象高级语法部分 静态方法 ...
- ql的python学习之路-day15
前言:本节主要讲解的是文件路径 在实际的软件开发中会设计一个项目的文件目录,按照执行包bin.配置包config.核心包core等来设计,在执行包里面要运行核心包里的主程序mian,由于不在同一级的目 ...
- ql的python学习之路-day14
前言:本节主要学习时间模块time.datetime python中的几种时间表示:1)时间戳 2)格式化的字符串时间 3)struct_time元组格式的时间 time.datetime模块源码: ...
- ql的python学习之路-day13
前言:本节主要学习模块 一.模块的定义 模块:本质是.py结尾的python文件(文件名:test.py,对应的模块是:test),用来从逻辑上组织python代码(变量.函数.类.逻辑,本质是实现一 ...
- ql的python学习之路-day12
前言:这一节主要学习json和pickle 背景: 相信大家在日常生活中都有接触大型的网络游戏,打游戏的时候都是自己在电脑上操作,自己刷怪升级:当然也会碰到中午去吃饭然后挂机的情况,让电脑自动的刷怪, ...
- ql的python学习之路-day11
前言:本节主要学习python内置的方法 #!/usr/bin/env python # -*- coding:utf-8 -*- # Author:qinjiaxi from collections ...
- ql的python学习之路-day10
前言:本节主要讲解迭代器和生成器 迭代器&生成器 一.生成器(generator) 循环占用大部分的容量内存,如果只需要循环前面的几个结果那怎么样做呢,在python中有一种一边循环一边计算的 ...
- ql的python学习之路-day9
前言:本节主要学习装饰器 一.装饰器 定义:本质上是个函数,用来装饰其他函数:(就是为其他函数添加附加功能) 原则:1.不能修改被装饰的函数的源代码 2.不能修改被装饰的函数的调用方式 以上两点可以总 ...
- ql的python学习之路-day8
前言:本节主要学习的是函数的全局变量和局部变量以及递归 一.全局变量和局部变量 定义在函数外并且在函数头部的变量,叫做全局变量,全局变量在整个代码中都生效. 局部变量只在函数里生效,这个函数就叫做这个 ...
随机推荐
- css的变量教程,更强大的css
当微软宣布 Edge 浏览器将支持 CSS 变量.这个重要的 CSS 新功能,所有主要浏览器已经都支持了.本文全面介绍如何使用它,你会发现原生 CSS 从此变得异常强大. 一.变量的声明 声明变量的时 ...
- python学习笔记(二)---for循环与操作列表
内容概要 for循环 range(start,end,step)函数 生成随机数列表 list()函数 将range()的结果整合到某个列表 列表的操作 切片(start: end :step) 元组 ...
- js拼接php拼接
当我们用到ajax的时候,局部替换的时候,我们可以在前台拼接,后台拼接,这个取决于你是前端后端这样拼接判断比较好, 判断不拼接,判断的值进行拼接 然后在html 替换 $.each 前台循环 ...
- memcache---mongodb---redis比较
Memcached的优点: Memcached可以利用多核优势,单实例吞吐量极高,可以达到几十万QPS(取决于key.value的字节大小以及服务器硬件性能,日常环境中QPS高峰大约在4-6w左右). ...
- 20199308《Linux内核原理与分析》第十二周作业
一.实验简介 竞态条件是指多个线程同时访问或者操作同一块数据,运行的结果依赖于不同线程访问数据的顺序.如果一个拥有root权限的程序存在竞态条件漏洞的话,攻击者可以通过运行一个平行线程与漏洞程序竞争, ...
- 2019-2020-1 20199329《Linux内核原理与分析》第一周作业
Linux学习随笔 Linux 是一个操作系统,我们的 Linux 主要是系统调用和内核那两层. UNIX前身是Multics,但 UNIX 的商业版本非常昂贵,于是Linus Torvalds(Li ...
- OpenCV学习(1)——初步接触
一.介绍OpenCV OpenCV的全称是Open Source Computer Vision Library,是一个跨平台的计算机视觉库.OpenCV是由英特尔公司发起并参与开 ...
- Ubuntu搭建NTP服务器
NTP简介 NTP是Network Time Protocol的缩写,又称为网络时间协议.是用来使计算机时间同步化的一种协议,它可以使计算机对其服务器或时钟源(如石英钟,GPS等等)做同步化,它可以提 ...
- div/dom元素拖拽缩放插件,纯js实现拖拽缩放,不依赖jQuery~
产品需求,需要用到对div(dom)进行拖拽缩放操作,看到有好多插件,要么依赖jQuery,要么文件太大. 封装了一个插件,不压缩状态下5KB. html <!DOCTYPE html> ...
- 安装opencv3.3.0方法
#系统环境:CentOS6.5 x64 #首先安装jdk7u80 mkdir /java tar -zxvf jdk-7u80-linux-x64.gz -C /java/ vim /etc ...