函数浅析:可以减少代码重用,保持一致性,可扩展性,易维护性。

定义方法:def 函数名(形参):

         '''功能注释'''

           代码块

打印函数名时,会出现函数的内存地址。两个函数名相同时,最后一个会覆盖之前的所有函数。

过程:没有返回值的函数就是过程,默认返回None。

总结:

  返回值数=0,返回None

  返回值数=1,返回object

  返回值数>1,返回tuple

函数一旦运行至return,则整个函数结束。函数参数必须一 一对应,否则报错。

def test(x,y,z):
print(x)
print(y)
print(z)
#位置参数,必须一 一对应
test(1,2,3)
#关键字参数,无需一 一对应
test(y=2,x=1,z=3)
#位置参数必须在关键字参数左侧,并且一 一对应
test(1,2,z=3)
#参数可无,令其为None
def handle(x,type=None):
print(x)
print(type)
#默认参数,可以修改。
def handle(x,type="mysql"):
print(x)
print(type)
handle('hello','sqlite')

参数组:** 字典 、 * 列表

#参数组,**代表 字典  *代表 列表
#列表形式传值
def test(x,*args)
print(x)
print(args)
test(1,2,3,4,5)
=====》1
(2,3,4,5) test(1,{'name','alex'})
=====》1
({'name','alex'})
#加上*,会依次传给args,若是*后是字典,则会以列表形式遍历keys。
test(1,*['x','y','z'])
=====》1
('x','y','z')
#字典形式传值
def test(x,**kwargs)
print(x)
print(kwargs)
test(1,y=2,z=3)
====》1
{'y':2,"z":3}

*args不可放在**kwargs后面,但是可以放到**kwargs前面。

def test(x,*args,**kwargs):
print(x)
print(args,args[-1])
pirnt(kwargs,kwargs.get('y')) test(1,*[1,2,3],**{'y':1}) ====>1
   (1,2,3) 3
   {'y':1} 1

 全局变量与局部变量

当变量前加一个 global时,局部变量会变成全局变量。

name = 'alex'

def change_name():
global name #定义全局
name = 'haha'
print('change your name,'name)
def as_df():
print('as_df',name)
=======>change your name haha
as_df haha

如果局部变量在global上方,则会报错。

def hu():
name = 'hangtian'
print(name)
def xu():
name = '刘禅'
print(name)
def tian():
name = 'sky'
print(name)
print(name)
tian()
xu()
print(name) hu()
=========>>
hangtian
刘禅
刘禅
sky
hangtian

nonlocal指的是上一级变量

#nonlocal,指定上一级变量
name = "gangniang" def weihou():
name = 'hh'
def weiweihou(): #外部的不能拿到内部的
nonlocal name
name = '冷静'
weiweihou()
print(name) print(name)
weihou()
print(name)
==========>>
gangnian
冷静
gangnian

前向引用,风湿理论:函数即变量

name = 'gangnian'

def weihou():
name = 'hh'
def weiweihou(): #外部的不能拿到内部的
nonlocal name #拿到上一级的变量
name = '冷静' #对上一级变量进行修改
weiweihou()
print(name) print(name)
weihou()
print(name) #会报错,根据风湿理论分析:函数即变量
def a():
print(1234)
bar()
a()
def bar():
print(123)

递归:

递归特性:

1.必须有一个明确的结束条件

2.每次进入更深一层递归时,问题规模相比上次递归都应有所减少

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

import time

person_list=['alex','haha','sky','XT']
def ask_way(person_list): if len(person_list)==0:
return "根本没有人知道路"
person = person_list.pop(0) if person == 'XT':
return "%s说:我知道,向前走,之后左拐,就会看到出口" %person
print('h i,帅哥[%s],敢问路在何方' %person)
print('%s回答道:我不知道,但念及你慧眼识珠,你等着,我给你问问%s' %(person,person_list[0]))
time.sleep(4)
res = ask_way(person_list)
return res res = ask_way(person_list)
print(res) ====================
h i,帅哥[alex],敢问路在何方
alex回答道:我不知道,但念及你慧眼识珠,你等着,我给你问问haha
h i,帅哥[haha],敢问路在何方
haha回答道:我不知道,但念及你慧眼识珠,你等着,我给你问问sky
h i,帅哥[sky],敢问路在何方
sky回答道:我不知道,但念及你慧眼识珠,你等着,我给你问问XT
XT说:我知道,向前走,之后左拐,就会看到出口

Python从入门到精通之Seventh!的更多相关文章

  1. python从入门到精通之30天快速学python视频教程

    点击了解更多Python课程>>> python从入门到精通之30天快速学python视频教程 课程目录: python入门教程-1-Python编程语言历史及特性.mkv pyth ...

  2. Python从入门到精通之eighth!

    函数式编程与内置函数 函数作用域: def test1(): print('in the test1') def test(): print('in the test') return test1() ...

  3. Python从入门到精通之Sixth!

    补充:enumerate 函数用于遍历序列(元组tuple.列表list.字典dict)中的元素以及它们的下标: >>> for i,j in enumerate(('a','b', ...

  4. Python从入门到精通之Forth!

    Python基本数据类型之列表 补充:range()方法 python2: range   立即创建 xrange  for循环的时候才一个一个创建 Python3: range     for循环的 ...

  5. Python从入门到精通之Third!

    Python运算符 算数运算符:+    -    *   /     %    //    **  比较运算符:==    >     <     >=   大于等于      & ...

  6. Python从入门到精通之Second!

    初识Python基础! -基础     -扩展名可以是任意的,但是导入模块时,如果不是.py文件就会报错. -两种执行方式      1.python解释器       文件名.py 文件路径 -Li ...

  7. Python从入门到精通之First!

    Python的种类 Cpython Python的官方版本,使用C语言实现,使用最为广泛,CPython实现会将源文件(py文件)转换成字节码文件(pyc文件),然后运行在Python虚拟机上. Jy ...

  8. Python从入门到精通之环境搭建

    本章内容: Windows系统环境搭建 Linux系统环境搭建 Mac OS系统环境搭建 一.下载python安装包 下载地址:https://www.python.org/downloads/ 二. ...

  9. Python从入门到精通之Fifth!

    字典  类名:dict   字典是无序的. 字典的创建  info = {"k1":{1:"abc",[1,2,3]},"k2":True} ...

随机推荐

  1. 秋日上新!H5活动之家营销平台升级大盘点!

    H5活动之家活动营销平台,免费定制使用抽奖.投票.砍价.红包.互动.游戏等不同类型的微信营销活动. 近期多个活动进行了升级改造,更有集福卡持续热度,微助力火热上线等亮点:同时平台也进行了提高访问速度. ...

  2. Python——Django运行问题

    1.Python3.7+Django2.2操作Mysql数据库时出现如下错误:django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3. ...

  3. CAtia_打开提示:许可证过期怎么办

    CAtia_许可证过期怎么办:进计算机管理,点开服务和应用程序,点服务,找到DS License Server,在启动此服务的地方点启动,从而开启DS License Server.

  4. 【Debug】串口发送数据时部分字节被拉长,出现帧错误,原因MCU进入低功耗模式导致串口时钟停了!

    串口发送数据时部分字节被拉长,出现帧错误,原因MCU进入低功耗模式导致串口时钟停了!

  5. 【EFM32】EFM32芯片解锁、加锁操作

    [解锁] 使用J-Flash,新建Project,选择对应的EFM32芯片型号. 选择Target >> Connect >> Unsecure chip ,便进行解锁了,解锁 ...

  6. 关于SQL 导出脚本失败 及SQL 的重装

    说点题外话 最近跳到一家新公司 薪资比较客观 但是技术可能不太尽如人意 而且对.Net方向的开发好像不是很友好  自己也不知道该怎么办 一个人大老远跑这边来 附近也没有什么.net的公司和职位 房子租 ...

  7. Django Cache缓存系统学习--数据库缓存

    Django是动态网站,用户每一次请求页面,服务器都会执行以下操作:数据库查询.渲染模版.执行业务逻辑,最后生成用户可查看的页面.当访问量比较大的时候,会消耗掉大量的资源,这时候就会考虑到缓存问题. ...

  8. 孤儿进程VS僵尸进程

    我们知道在unix/linux中,正常情况下,子进程是通过父进程创建的,子进程在创建新的进程.子进程的结束和父进程的运行是一个异步过程,即父进程永远无法预测子进程 到底什么时候结束. 当一个 进程完成 ...

  9. HTTP协议中request和response常用方法

    一.request的常用方法:1.获取请求的方式 getMethod()2.目录的路径 getContextPath()3.获取servlet路径 getServletString()4.获得get请 ...

  10. Commons Daemon procrun stdout initialized

    参考 https://blog.csdn.net/qq_19865749/article/details/69664979 jvm路径错误