2019-05-18

函数

  • 传参
    1.两种传参方式
#两种传参方式:按位置,关键字
#函数如果有默认值,则必须放在最后
full_name = get_fullname('于','tongtng')
#print(full_name)
print(get_fullname('tongtong')

ps:求全名

def get_fullname(last_name,first_name):
    '''
    求全名
    :param last_name: 姓
    :param first_name: 名
    :return: 全名
    '''
    full_name = last_name + first_name
    return  full_name

2.变长参数

# *将参数都放置到一个元组中
def  self_print(name,*a):
    print(a)
    print(type(a))

self_print(1,2,3,4,5,6)
# **将参数都放到字典中
def d_self_print(**kwargs)
    print(kwargs)
d_self_print(last_name='shun',first_name='tong')    
#形参顺序:位置参数->元组->字典
def mix(name,*t,*kw)
    print(name)
    print(t)
    print(kw)
    
mix('shun',20,'tongtong',tongtong='女'

*有拆开元组和列表的作用
**有拆开字典的作用

t = (1,2,3,4,5)
print(*t)
def f(*tt)
    print(kw)
f(*[1,2,3,4,5])

def ff(*kwargs)
    print(kwargs)
ff(**{'name':'tongtong','age':20})

3.返回值

def sum_and_avg(*numbers):
    total = sum(numbers)
    avg_number = total / len(numbers)
    
    return  total,avg_number
sum,avg = sum_and_avg(1,2,3,4,5,6,7,8,9,10)
print("总和是%f" % sum)
print("平均值是%f" % avg)

4.传参问题
函数的传参问题
数据分为引用类型,普通类型
python中的基本数据类型都是普通类型。数,布尔型,字符串型
除了这些之外的类型都是引用类型
普通类型赋值的时候,传的是值
引用类型赋值的时候,传的是址

l1 = [1,2,3,4,5]
l2 = l1

l2[1] = 5
print(l1)

a = 5
b = a
b = 10
print(a)

ps:传参的本质就是赋值操作,如果传递的是引用类型数据,则需要注意是否在函数中对其做出了修改

def power(numbers):
    #numbers = [x**2 for x in numbers]
    #numbers[9] = 10 
    #创建数据副本
    #numbers = numbers[:]
    numbers = list(numbers)
    numbers[3] = 10
    return  numbers
nums = [1,2,3,4,5,6,7,8,9,10]
print(power(nums))
print(nums)

5.闭包
闭包:闭包的本质是函数嵌套函数,外层函数返回内层函数的地址

def fun():
    print("hello world")
#函数名的本质是函数的地址
f = fun
f()
def outter():
    #a = 10
    def inner():
        a = 20
        print(a)
        print("hello world")
        print("-------")
        print(a)
    return inner
fo = outter()
fo()
#内层函数可以访问外层函数的变量,但是不能修改
#内层函数访问变量时会先从自己内部查找,如果找不到,就会层层向上查找
def outter():
    #a = 10
    def inner():
        #说明使用的是外层变量
        global aa
        aa == 1
        '''
        print(aa)
        print("hello world")
        print("-------")
        print(a)
        '''
    return inner
fo = outter()
fo()

内层函数可以访问外层函数的变量,但是不能修改
内层函数访问变量时会先从自己内部查找,如果找不到,就会层层向上查找
python中,变量的作用域是以函数为单位的
global修饰变量时,说明使用的是最外层的全局变量
nonlocal修饰变量时,说明使用的是嵌套层函数的变量

def outter():
    #a = 10
    def inner():
        #说明使用的是外层变量
        global aa
        aa == 1
        '''
        print(aa)
        print("hello world")
        print("-------")
        print(a)
        '''
    return inner
fo = outter()
fo()
def outter():
    a = 10
    def inner():
        #说明使用的是外层变量
        nonlocal aa
        aa == 1
        print(aa)
        '''
        print(aa)
        print("hello world")
        print("-------")
        print(a)
        '''
    return inner
fo = outter()
fo()

例:斐波那契数列:1 1 2 3 5 8 13

#用递归实现
def fibonacci(n):
    if n == 1 or n == 2:
        return 1
    return fibonacci(n-1)+fibonacci(n-2)
for i in range(1,6):
    print(fibonacci(i))

#用循环实现
def fibonacci_for(n):
    before = 0
    after = 1
    for i in range(1,n+1):
         tmp = before + after
         before = after
         after = tmp
    return  tmp
for i in range(1,10)
    print(fibonacci_for(i))

6.高阶函数:函数的参数或函数的返回值是函数的函数

def handle(func,*param)
    return func(param)
def my_sum(*param):
    sum = 0
    for v in range(len(param))
        sum += param[i]
    return sum 
print(my_sum(1,2,3,4,5))
#函数的参数还是函数
print(handle(my_sum,1,2,3,4,5,6))

def my_mul(*param)
    mul = 1
    for v in param:
        mul = v
    return mul
print(handle(my_mul,1,2,3,4,5))

7.系统中已经存在的函数
map(func,inteable)
该函数会把inteable中的数据依次传递给func函数处理,最后把处理的结果返回

ef power(x):
    return x * x
result = map(power,[1,2,3,4,5,6])
#for i in result:
 #   print(i)
 result = map(lambda x:x*x,[1,2,3,4,5,6,7])
 print(list(result))

reduce(func,inteable) 函数
累计操作,func函数必须接收两个参数,reduce会把func的运行结果做一个参数,然后从inteable中再取出一个数据当做另一个参数

from functools import reduce
li = [1,2,3]
result = reduce(lambda  x,y:x * y, li)
print(result)

fitter(func,inteabie)
根据函数func 来过滤interable,将interable中的数据传入函数func中,如果函数返回rue,就保留该数据,否则就不保留

li = [1,2,3,4,5,6,9,10,15]
result = list(filter(lambda x:x % 2 ==1,li))
print(result)

sort(inteable,key=None,reverse=False)
对数据进行排序,key可以用来指定排序的规则,值是一个函数,reverse是用来指定排序的顺序,-->升序或降序

li = [1,2,-4,-10,12]
rs = li.sort()    #就地排序
#sorted(li,key=abs)
#print(li)
#list 自带的sort方法会影响原始数据,系统级的sorted函数不会影响原始数据
rs = sorted(li,key=abs,reverse=Ture)
print(rs)

模块

模块就是一个文件,我们在编写程序的时候,可以把功能相似的代码放到一个模快中
导入模块方式:
1.from 开头 from 模块名 import 函数名

  1. import 开头 import 模块名
    可以使用‘as’为模块或函数起一个别名
from food import  make_pizza,make_bun()   
make_pizza()
make_bun()
from food import  make_pizza as mp
from pizza import  make_pizza
mp()
make_pizza()

备注:

def ff():
    '''
    打印test!!
    :return: 
    '''
    print("test!!!!")
    
print(ff.__doc__)
help(ff)

a = (1,[1,2,3],3,4,5)
a[1].append(4)
print(a)
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,717评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,501评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,311评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,417评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,500评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,538评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,557评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,310评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,759评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,065评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,233评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,909评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,548评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,172评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,420评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,103评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,098评论 2 352

推荐阅读更多精彩内容