函数

 

知识点回顾

1.集合  ( )

 主要作用是: 

      1.去重

      2.关系测试,交集\差集\并集\反向(对称)差集

2.元组  ( )

 主要作用是: 

      1.只读列表,只有count, index 2个方法

      2.如果有一些数据不想被人修改。 可以存为元组,比如身份证列表

3.字典  { }

  key-value对

      特性 : 无顺序,去重,查询速度比列表块多了,比list占用内存多

   1.因为是hash类型,会把key hash成二进制,并放入hash表中,。。。

 

函数

  特性:1.减少重复的代码

    2.使程序变得可扩展

    3.使程序变得易维护

语法  、

def say(): #调用函数
    print("hellow you!")
say()  #调用函数

也可以带参数 

def say(x,y):
    res = x*y
    return res #返回函数执行结果
c = say(8,9)
print(c)
>>72

  

形参变量:只有在被调用时菜分配内存单位,在调用结束时,即刻释放所分配的内存单位,因此,形参只有在内部有效,函数调用结束返回主调用函数则不能再使用该形参变量

实参变量:可以是常量,变量,表达式,函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传给形参。因此应预先用赋值,输入等办法使参数获得确定值

代码如下:

实验代码:1--->>

def say():
    username = input("请输入您的用户名:")
    password = input("请输入密码")
    _username='zcq'
    _password='123456'
    if username == _username and password == _password:
        print('\033[34m欢迎您登陆成功\033[0m')
        return True
def home():
    if say() == True:
        print("\033[32m登录成功,进入您的home\033[0m")
        return True
    else:
        print('\033[33m请您重新输入\033[0m')
        say()
def pay():
    if home() == True:
        print("\033[35m欢迎进去您的购物车\033[0m")
    else:
        say()
pay()

实验代码:1--->>>

def say(name,age,contry='CN',*args,**kwargs):
    print('姓名',name)
    print('年龄',age)
    print('国家',contry)
    print('自定义添加a',args)
    print('自定义添加k',kwargs)
say("zcq",'23','CN','爱吃羊蝎子',时间='20161030')
print('\033[32m---------------------\033[0m')
say('cq',23,'CN','IT',uuid='gong zuo 3 old yesar',moeny='100000')
print('\033[34m---------------------\033[0m')
say(name='zcq',age='24',uuid='stuid10001',chengji='A+')
print('\033[35m---------------------\033[0m')
say(age=22,name='cq',contry='python')

>>

姓名 zcq
年龄 23
国家 CN
自定义添加a ('爱吃羊蝎子',)
自定义添加k {'时间': '20161030'}
---------------------
姓名 cq
年龄 23
国家 CN
自定义添加a ('IT',)
自定义添加k {'uuid': 'gong zuo 3 old yesar', 'moeny': '100000'}
---------------------
姓名 zcq
年龄 24
国家 CN
自定义添加a ()
自定义添加k {'chengji': 'A+', 'uuid': 'stuid10001'}
---------------------
姓名 cq
年龄 22
国家 python
自定义添加a ()
自定义添加k {}

备注:1.其中contry='CN'  这是默认参数 

   2.赋值的时候,是依次运行,对应位置,如果其中name赋值了一次,就不能再次赋值了,

   3.所有的默认参数,都必须放在位置参数后面

   4.赋值的时候可以指定参数 ,指定参数也需要放在后面

非固定参数:

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

 *args 会把传入的参数 变成一个元组形式: **kwargs 会把多传入的参数变成一个字典形式

全局与局部变量: 在函数中 尽量不要把局部变量声明为全局变量,

如果全局和局部变量名称一样,但是代表的意思是不同的,在内存地址也是不同

返回值:

1. 一旦你的函数经过调用并开始执行,那你函数外部的程序,就没办法在控制函数的执行过程了,

 此时外部程序只能安静的等待函数的执行机结果,为啥要等待函数结果,因为外部程序要根据函数的执行结果来决定下一步怎么走。这个执行结果就是以return的形式返回给外部程序

2.return 代表着一个 函数的结束

3.return 可以返回任意数据类型

4.对于用户角度,函数可以返回任意数量的值,但对于py本身来讲,函数只能返回一个值(以元组的方式显示)

5.如果未在函数中指定return,那这个函数的返回值为None 

嵌套函数:(day4会有详细内容)

def say():
    name = 'zcq'
    print(name)
    def say2():
        name = 'rch'
        print(name)
    say2()
say()
>> 
zcq
rch

匿名函数:

def say(n,z):
    return n*z
date=lambda x,y:x+y       #lambda 只能做简单的运算,以及三元运算
date2=lambda x,y:x//y
print(say(8,9))
print(date(8,9))
print(date2(80,7))
>>
72
17
11

其中:lambda 只能做运行运算操作,以及三元运算

附图:

 

三元运算:

a = 5
b = 4
n = 10
d = a if a>10 else b
print(b)

>>>三元扩展:

1.

def say(n):
    return -n
data=map(lambda  n:n*n if n>5 else n,range(10))
for i in data:
  print(i) >> 0 1 2 3 4 5 36 49 64 81

#备注:其中map是把每个值取出来,让函数去执行

2.

date2=map(lambda n:n*n if n>5 else say(n),range(10))
for q in date2:
    print(q)
>>
0
-1
-2
-3
-4
-5
36
49
64
81

递归:(循环到999就报错,这是py3设计,防止内存溢出)

def func(n):
    #print(n)
    if n//2 > 0:
        func(n//2)
    print(n)
func(10)

 附图:

高阶函数:

def add(x,y,f):
    return f(x) + f(y)
res=add(3,-6,abs)
print(res)
>>
9

变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数。

#abs求绝对值

二分查找:

 1 data = [3,5,6,7,25,56,60,70,90,100]
 2 def binarg(datasets,number):
 3     if int(len(datasets)/2) >0:
 4         middle_pos = int(len(datasets)/2)
 5         if datasets[middle_pos] == number:
 6             print('num',datasets[middle_pos])
 7         elif datasets[middle_pos] > number:
 8             print('查询数值不在右边',datasets[0:middle_pos],datasets[middle_pos])
 9             binarg(datasets[0:middle_pos],number)
10         else:
11             print('查询数值在左边',datasets[middle_pos+1:],datasets[middle_pos])
12             binarg(datasets[middle_pos + 1:], number)
13     else:
14         print('查询数值不在')
15 
16 binarg(data,100)
二分查找

内置函数:

1.反转:字符串和列表都可以 

data='abc'
data=reversed(data)
for i in data:
    print(i)
>>
c
b
a

2.排序:字符排序,按照ascii码表

a="chaoqun"
a=sorted(a)
print(a)
>>
['a', 'c', 'h', 'n', 'o', 'q', 'u']

3.ZIP方法

a=[1,3,5,7,8]
b=[5,6,-5,9,10,20,60]
for i in zip(a,b):
    print(i)
>>
(1, 5)
(3, 6)
(5, -5)
(7, 9)
(8, 10)

4.print(globals()) #把当前程序所在内存里的所有数据都以字典的形式打印出来

5.exec内置函数,能执行程序

6.bytes值可以用bytearray修改

 

 

 

                                                                                                                                                                           

posted @ 2016-10-30 23:03  所有的梦想都画在墙上  阅读(117)  评论(0)    收藏  举报