函数 函数:
程序中可重复使用的程序段 给一段程序起一个名字,用这个名字来执行一段程序,反复使用 (调用函数)
用关键字 ‘def' 来定义,identifier(参数)
identifier
参数 list
return statement
局部变量 vs 全局变量
第一:如定义在类或者函数体外,在函数或者类中引用需要用到 global声明
temp_t = "ceshi"
def tmp1():
global temp_t
temp_t =1
print temp_t
结果:1
第二:直接在函数或类中定义,需要先执行函数或者类,才能执行输出
def a():
global cc
cc = "bb"
def b():
global cc
cc = "kk"
a()
b()
print(cc)
结果:kk
#没有参数和返回的函数
# def say_hi():
# print(" hi!")
# say_hi()
# say_hi() #
#有参数,无返回值
# def print_sum_two(a, b):
# c = a + b
# print(c)
#
# print_sum_two(3, 6)
# def hello_some(str):
# print("hello " + str + "!")
#
# hello_some("China")
# hello_some("Python")
#有参数,有返回值
# def repeat_str(str, times):
# repeated_strs = str * times
# return repeated_strs
#
# repeated_strings = repeat_str("Happy Birthday!", 4)
# print(repeated_strings)
4.2part2_函数
默认参数
关键字参数
VarArgs 参数 Code:
#-*- coding: utf-8 -*-
# 1.默认参数,且默认值参数一定在最右端
def repeat_str(s, times = 1):
repeated_strs = s * times
return repeated_strs
repeated_strings = repeat_str("Happy Birthday!")
print(repeated_strings)
repeated_strings_2 = repeat_str("Happy Birthday!" , 4)
print(repeated_strings_2)
#不能在有默认参数后面跟随没有默认参数
#f(a, b =2)合法
#f(a = 2, b)非法
#2.关键字参数: 指的是调用时候的参数传递形式,可以按参数名字指定值
def func(a, b = 4, c = 8):
print('a is', a, 'and b is', b, 'and c is', c)
func(13, 17)
func(125, c = 24)
func(c = 40, a = 80)
#3.VarArgs 参数(重要)
#*参数和**参数,前者用来接收任意多个实参并将其放在一个元祖中
#**用来接收字典类型的参数
def print_paras(fpara, *nums, **words):
print("fpara: " + str(fpara))
print("nums: " + str(nums))
print("words: " + str(words))
print_paras("hello", 1, 3, 5, 7, word = "python", anohter_word = "java")
4.3 函数补充内容
3.5(补充)函数中需要注意的事项
#-*-coding:utf8-*- #函数中需要注意的事项
#1.默认值参数,且默认值参数一定在最右端
def say(mess,times=1):
print (mess+' ')*times
print say.func_defaults #查看函数所有默认值参数的当前值
say('hello')
say('hello',3)
#2.关键参数:指的是调用时候的参数传递形式,可以按参数名字指定值
def demo(a,b,c=5):
print a,b,c
print demo(3,7)
print demo(a=7,b=3,c=6)
print demo(a=8,b=9,c=0)
#3.可变长参数
#*参数和**参数,前者用来接收任意多个实参并将其放在一个元祖中
#**用来接收字典类型的参数
def demo1(*p):
print p
demo1(1,2,3)
demo1(1,2,3,34)
def demo2(**p):
for item in p.items():
print item
demo2(x=1,y=2,z=3) #key 和 value 形式
#4.传递参数时的序列解包
def demo3(a,b,c):
print a+b+c
seq=[1,2,3]
demo3(*seq)
tup=(1,2,3)
demo3(*tup)
dict={1:'a',2:'b',3:'c'}
#字典对象作为实参时默认使用字典的键,
#如果需要将字典中键值元素作为参数则需要使用 items()方法明确说明,
# 如果单独取出“值”需要调用字典的 values()方法说明
demo3(*dict)
demo3(*dict.items())
set={1,2,3}
demo(*set)
demo3(*dict.values())
(重点知识)
#5.lambda 表达式--声明匿名函数(没有函数名字的临时使用的小函数)
#lambda 表达式只可以使用一个表达式,不允许包含其他复杂语句,但是在表达式中可以调 用其他函数
#并支持默认值参数和关键参数,该表达式的计算结果相当于函数的返回值
f=lambda x,y,z:x+y+z
print f(1,2,3)
g=lambda x,y=2,z=3:x+y+z #含有默认参数
print g(1)
print g(2,4,5)
print g(2,y=4,z=5) #调用时使用关键参数
L=[(lambda x:x**2),(lambda x:x**3),(lambda x:x**4)]
print L[0](2),L[1](2),L[2](2)
L=[1,2,3,4,5]
print map((lambda x:x+10),L) #没有名字的 lambda 表达式作为函数参数
print map((lambda x,y,z:x*y*z),[1,2,3],[1,2,3],[1,2,3])
#lambda 使用自定义函数(平方)
def demo4(n):
return n*n
demo4(5)
a_list=[1,2,3,4,5]
map(lambda x:demo4(x),a_list)
#非重点掌握
data=list(range(20))
print data
import random
random.shuffle(data)
print data
data.sort(key=lambda x:x)
print data
data.sort(key=lambda x:len(str(x))) #使用 lambda 表达式指定排序规则
print data
data.sort(key=lambda x:len(str(x)),reverse=True)
print data
4.4 lambda 表达式 语法;
函数名=lambda 参数:表达式
代码:
#1 g=lambda x,y:x+y print(g(4,5))
#2.带默认参数的 lambda 表达式 g1=lambda x,y=0,z=0:x+y+z print(g(5))
#3.直接使用 lambda 表达式 (lambda x,y=0,z=0:x+y+z)(4,5,6)
使用建议:
当函数非常简单,只有一个表达式的时候,可以考虑 lambda 表达式,否则建议用普通函数