函数与函数式编程

一.编程模式分为三种:

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的更多相关文章

  1. python学习之路-day7

    本节内容: 面向对象高级语法部分 静态方法.类方法.属性方法 类的特殊方法 反射 异常处理 Socket开发基础 面向对象高级语法部分 静态方法                             ...

  2. ql的python学习之路-day15

    前言:本节主要讲解的是文件路径 在实际的软件开发中会设计一个项目的文件目录,按照执行包bin.配置包config.核心包core等来设计,在执行包里面要运行核心包里的主程序mian,由于不在同一级的目 ...

  3. ql的python学习之路-day14

    前言:本节主要学习时间模块time.datetime python中的几种时间表示:1)时间戳  2)格式化的字符串时间 3)struct_time元组格式的时间 time.datetime模块源码: ...

  4. ql的python学习之路-day13

    前言:本节主要学习模块 一.模块的定义 模块:本质是.py结尾的python文件(文件名:test.py,对应的模块是:test),用来从逻辑上组织python代码(变量.函数.类.逻辑,本质是实现一 ...

  5. ql的python学习之路-day12

    前言:这一节主要学习json和pickle 背景: 相信大家在日常生活中都有接触大型的网络游戏,打游戏的时候都是自己在电脑上操作,自己刷怪升级:当然也会碰到中午去吃饭然后挂机的情况,让电脑自动的刷怪, ...

  6. ql的python学习之路-day11

    前言:本节主要学习python内置的方法 #!/usr/bin/env python # -*- coding:utf-8 -*- # Author:qinjiaxi from collections ...

  7. ql的python学习之路-day10

    前言:本节主要讲解迭代器和生成器 迭代器&生成器 一.生成器(generator) 循环占用大部分的容量内存,如果只需要循环前面的几个结果那怎么样做呢,在python中有一种一边循环一边计算的 ...

  8. ql的python学习之路-day9

    前言:本节主要学习装饰器 一.装饰器 定义:本质上是个函数,用来装饰其他函数:(就是为其他函数添加附加功能) 原则:1.不能修改被装饰的函数的源代码 2.不能修改被装饰的函数的调用方式 以上两点可以总 ...

  9. ql的python学习之路-day8

    前言:本节主要学习的是函数的全局变量和局部变量以及递归 一.全局变量和局部变量 定义在函数外并且在函数头部的变量,叫做全局变量,全局变量在整个代码中都生效. 局部变量只在函数里生效,这个函数就叫做这个 ...

随机推荐

  1. JVM致命错误日志详解

    目录 文件描述 文件位置 文件头 错误信息记录 JVM运行信息 崩溃原因 错误信息 线程描述 线程信息 信号信息 计数器信息 机器指令 内存映射信息 线程堆栈 其他信息 进程描述 线程列表 虚拟机状态 ...

  2. LeetCode 面试题56 - I. 数组中数字出现的次数 | Python

    面试题56 - I. 数组中数字出现的次数 题目 一个整型数组 nums 里除两个数字之外,其他数字都出现了两次.请写程序找出这两个只出现一次的数字.要求时间复杂度是O(n),空间复杂度是O(1). ...

  3. IDEA设置导入主题样式皮肤,加入背景图片

    主题下载地址:http://www.riaway.com/theme.php 里面有很多主题,看个人喜好,这里我用的Monokai Sublime Text 3. 导入主题打开IDEA,找到File ...

  4. Codeforces Round #635 (Div. 2) 题解

    渭城朝雨浥轻尘,客舍青青柳色新. 劝君更尽一杯酒,西出阳关无故人.--王维 A. Ichihime and Triangle 网址:https://codeforces.com/contest/133 ...

  5. 搭建Springboot+mybatis+redis+druid

    2019独角兽企业重金招聘Python工程师标准>>> 准备工作 JDK:1.8 使用技术:SpringBoot.Dubbo.Mybatis.Druid 开发工具:Intelj ID ...

  6. 谁需要GUI?快看Linux 终端生存之道

    完全在 Linux 终端中生存并不容易,但这绝对是可行的. 处理常见功能的最佳 Linux shell 应用 你是否曾想像过完完全全在 Linux 终端里生存?没有图形桌面,没有现代的 GUI 软件, ...

  7. checked 完整版全选,单选,反选

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <link rel= ...

  8. Web 跨域请求问题的解决方案- CORS 方案

    1.什么是跨域 跨域是指跨域名的访问,以下情况都属于跨域: 跨域现象 实例 域名不相同 www.baidu.com与www.taobao 一级域名相同,但是端口不相同 www.baidu.com:80 ...

  9. IDEA破解,自动激活【2020年版本也可以破解】

    破解 在破解之前,需要下载的文件有两个ideaIU-2019.3.3.exe.jetbrains-agent-latest.zip,前者是程序安装包,后者是破解补丁包(PS:补丁包里面有使用说明,下面 ...

  10. CC2530通用IO口的输入输出

    一.引脚概述 CC2530有40 个引脚.其中,有21个数字I/O端口,其中P0和P1是8 位端口,P2仅有5位可以使用.P2端口的5个引脚中,有2个需要用作仿真,有2个需要用作晶振.所以可供我们使用 ...