python只有函数没有过程

函数有运行完了之后会有返回值、过程没有

def back():

  return 1,'gg',2    #会有返回值(1,'gg',2) #注意默认返回元祖

一、全局和局部变量

在函数里面想改变全局变量的值,需要加上:global XX列表或单一值

二、内嵌函数

def ee():

  print "123"

  def ww()

    print "456"

  ww()        #最后在调用一下  你就可以在命令行输入ee()  会有123 456输出

在外面调用ww() 是无法调用的

三、闭包

函数式编程的重要语法结构,函数式编程是一种编程方式,其最经典的一个编程语言就是lisp 主要用于绘图与人工智能,天才程序员才使用的语言

闭包概念:如果在一个内部函数里,对外部作用域(不是在全局变量的引用),那么内部函数就被认为闭包

def Funx():

  def FunY(y):

    return x * y

  return FunY

可以这样用:

i = FunX(8)

i(5)          #先赋值x 再赋值y 最后输出40

在内部函数中只能调用外部函数的局部变量,但不能修改

还有调用的注意,看下面的这个栗子:

x=10
def www():
  x *= x

  return x       #发现会报错,因为x=10是全局变量,而自定义函数里面的x是局部变量的x,

print www()         #跟外面的x是不一样的

同样下面的这种引用也会报错:

def Fun1():

  x = 5

  def Fun2():

    x *= x

    return x

  return Fun2()

现在输入Fun1()会报错,因为python会把Fun2()函数中的x当做内部函数的变量,不会引用外部函数的变量

避免这样的方法以前是这样做:

def Fun1():

  x = [5]

  def Fun2():

    x [0]*= x[0]

    return x[0]

  return Fun2()        #把数据的容器变一下,变为列表

python3现在不用那么麻烦,直接价加一个东西就好了:

def Fun1():

  x = 5

  def Fun2():

    nonlocal x        #变为非局部变量,就可以在内部函数里面使用外部函数的变量

    x *= x

    return x

  return Fun2()
#在函数中修改全局变量的值,使用global xx变量

#在嵌套的函数中,想在内部函数中修改外部函数的局部变量 使用nonlocal

##################################################################

四、匿名函数:lambda

python写一些执行脚本时,使用lambda就可以省下定义函数的过程,使得代码更简单,还可以避免重复,简化代码可读性

def ww(x):

  return x * x    #两行代码

lambda x : x*x     #几个字就解决   还可以 g = lambda x : x*x  就可以使用 g(x)来替代这个式子

五、介绍两个BIF

1、filter(函数,可迭代的对象列表元祖什么的)  #有两个参数,其返回结果会是使用函数在对象中的每个元素进行迭代

                     #并返回为TRUE的列表

list(filter(None,[1,0,Flase,True]))    #会返回[1,True]

list(filter((lambda x: x %2),range(10)))  #自定义一个函数:用x除以2 得到余数,范围是1到10

                      #用filter处理,并生成list

2、map()

map在语言里面是映射的意思。将序列的每一个元素作为函数的参数,并进行迭代加工

list(map(lambda x : x*2,range(10)))    #生成0,2,4,6,8,10,12,14,16,18

六、补充

def funOut():
  def funIn():
  print('宾果!你成功访问到我啦!')
return funIn

上面的函数怎么能访问funIn?

第一种方法:funOut()()

第二种方法:go = funOut()

      go()

下面介绍一个很好的方法,用于看有很多符号的字符串中的字母、数字

str1='''xxx'''          #str1可以很长很长,有许多你看不懂的¥#!@%&***¥#,其中夹杂着字母数字
for each in str1:
  if each not in list1:
    list1.append(each)    #输出的是单一的‘@’  ‘#’  ‘¥’  ‘%’  ‘……’  ‘&’  ‘&’  ‘*’
print (list1)            #情况一目了然

可以继续改良一下:

str1 = '''拷贝过来的字符串'''
list1 = []

for each in str1:
  if each not in list1:
    if each == '\n':
      print('\\n', str1.count(each))
    else:
    print(each, str1.count(each))
list1.append(each)

最新文章

  1. Ext.NET-布局篇
  2. pycharm Cannot find declaration to goto----解决方案
  3. [GraphQL] Create a GraphQL Schema
  4. Android读写SD卡
  5. IOS 计算两个经纬度之间的距离
  6. \u202e
  7. CSS中.和#区别
  8. Android ImageView
  9. Pro Aspnet MVC 4读书笔记(4) - Working with Razor
  10. sqlserver 使用脚本创建Sql Server代理作业
  11. C#检测获取移动硬盘盘符
  12. bzoj 1835: [ZJOI2010]基站选址
  13. c# WebApi之接口返回类型详解
  14. 【基于微信小程序的社区电商平台】Alpha迭代心得
  15. 3D数学基础(一)Unity坐标系
  16. Springboot & Mybatis 构建restful 服务四
  17. Go结构体
  18. win10电脑录教学视频的时候有回声或者通话的时候有回声,严重干扰录制效果,解决方式。
  19. python int str
  20. Django拾遗--pagination、sitemap、admin、form

热门文章

  1. JAVA 配置
  2. RMQ求区间最大最小值
  3. python自动化基础问题解析
  4. NASM 之 helloworld1
  5. CPP-基础:windows api 多线程---互斥量、信号量、临界值、事件区别
  6. 修改visual studio setup 安装顺序(解决新版安装包无法自动移除老版本程序的问题)
  7. Bootstrap历练实例:响应式导航栏
  8. 661. Image Smoother@python
  9. js的命令模式
  10. FX3 DMA生产者消费者ID代表的含义