10.10 day9 함수 베이스

8380 단어

1. 얕은 복사와 깊은 복사

import copy

copy.copy( ): 
copy.deepcopy( ): 

a = 100
b = a
b = 200

a = [1, 2]
b = a.copy()
b.append(3)
print(a)
# [1, 2]

복사: 변수의 값을 한 부 부여하여 새로운 데이터를 생성한 다음에 새로운 데이터에 대응하는 주소를 얕은 복사로 되돌려줍니다. 직접 복사 주소(절편과 사전 목록의copy 방법은 모두 얕은 복사) 깊이 복사: 주소에 대응하는 값을 복사하고 새로운 주소를 생성합니다.

a1 = [1, 2]
a2 = {'a': 10}
list1 = [a1, a2]
#  
# list2 = list1.copy()
#  
# list2 = copy.deepcopy(list1)

list2 = copy.deepcopy(list1)
list2.append(1)
print(list1)
print(list2)
# [[1, 2], {'a': 10}]
# [[1, 2], {'a': 10}, 1]

list2[0].append(100)
print(list1)
print(list2)
# [[1, 2], {'a': 10}]
# [[1, 2, 100], {'a': 10}, 1]

2. 사전과 목록의 응용


목록의 요소와 사전의 값은 모든 종류의 데이터일 수 있습니다

1. 목록에 사전이 있다

persons = [
        {'name':' ', 'age': 50, 'sex': ' '},
        {'name':' ', 'age': 23, 'sex': ' '},
        {'name':' ', 'age': 32, 'sex': ' '}
           ]
print(persons)
# [{'name': ' ', 'age': 50, 'sex': ' '}, {'name': ' ', 'age': 23, 'sex': ' '}, {'name': ' ', 'age': 32, 'sex': ' '}]

print(persons[1]['name'])
#  

페르소나에서 가장 나이가 많은 사람의 이름을 찾아내세요.

max1 = 0   #  
name = '' #  
for x in persons[:]:
    age = x['age']
    if age > max1:
        max1 = age
        name = x['name']
    print(age)
print(max1, name)
# 50
# 23
# 32
# 50  

2. 사전에 목록이 있음


프로그램을 작성하여 한 반의 정보를 저장하고 학급명, 위치, 모든 학생(학생 중 이름, 나이와 학교 이름을 저장해야 함)

my_class = {
    'class_name': 'python1807',
    'location': '18-6',
    'all_students':[
        {'name': ' ', 'age': 20, 'school': ' '},
        {'name': ' ', 'age': 19, 'school': ' '},
        {'name': ' ', 'age': 23, 'school': ' '}
    ]
}
print(my_class['all_students'][0]['school'])
print(my_class)
#  
# {'class_name': 'python1807', 'location': '18-6', 'all_students': [{'name': ' ', 'age': 20, 'school': ' '}, {'name': ' ', 'age': 19, 'school': ' '}, {'name': ' ', 'age': 23, 'school': ' '}]}

연습: 반에 학생 한 명을 추가, 이름: 왕씨, 나이: 40, 학교: 북대청조

# name = input(' :')
# age = int(input(' :'))
# school = input(' :')
# #  
# student = {'name': name, 'age': age, 'school': school}
# #  
# my_class['all_students'].append(student)
# print(my_class)

# 2:  20 

all_student = my_class['all_students']
# for student in all_student[:]:
#     if student['age'] < 20:
#         all_student.remove(student)
# print(my_class)

index = 0
while index < len(all_student):
    student = all_student[index]
    if student['age'] < 20:
        del all_student[index]
        continue
    index += 1
print(my_class)
{'class_name': 'python1807', 'location': '18-6', 'all_students': [{'name': ' ', 'age': 20, 'school': ' '}, {'name': ' ', 'age': 23, 'school': ' '}]}

4. 함수를 사용하는 이유


"함수가 없을 때의 문제: 1. 같은 코드는 여러 번 반복해야 한다. 2. 기능이 바뀌면 코드를 많이 고쳐야 한다.
해결 방법:함수 사용

#  , 
#  
print(' ')
print(' ')
print(' ')
print(' ')
print(' ')
#  
#  
#  
#  
#  
#  
print(' ')
print(' ')
print(' ')
print(' ')
print(' ')

#  
#  
#  
#  
#  

4. 함수 선언


함수는 특정한 기능을 실현하는 코드 구간에 대한 봉인이다
분류: 사용자 정의 함수(프로그래머가 스스로 그 기능을 실현한다고 성명)와 내장 함수(시스템이 이미 완성했다고 성명함)
1. 함수를 설명하는 문법 def 함수 이름(매개 변수 목록): 함수체
설명: a.def --->python에서 함수를 설명하는 키워드 b. 함수 이름 ---> 식별자, 키워드가 아닙니다.PEP8명명명규범(모든 알파벳 소문자, 여러 단어 사이에 밑줄로 구분) 준수
c. () ---> 고정 형식 d. 매개 변수 목록 ---->형삼 목록, 매개 변수 이름 1, 매개 변수 이름 2...여러 개의 매개 변수가 있을 수도 있고, 함수의 외부에서 함수에 값을 전달하는 e.:-->고정 형식 f. 함수체 --->함수 기능을 실현하는 코드 세그먼트가 없을 수도 있다.
2. 초보자가 함수를 성명하는 절차 a. 함수를 확정하는 기능 b. 기능에 따라 함수 이름 c. 매개 변수를 확정한다. 유무를 확정하고 몇 개 (함수를 실현하는 기능을 보려면 함수 바깥에서 값을 전달해야 하는지 몇 개 전달해야 하는지) d. 함수 기능 e. 반환값을 확정한다.
3. 함수 호출 성명 함수를 호출할 때 함수체를 집행하지 않으며, 함수체는 함수 호출할 때만 집행한다
구문:함수 이름(실참 목록)
설명: 함수 이름 --->은 이미 성명된 함수 () --->의 고정된 쓰기 실참 목록 ---> 데이터 1, 데이터 2...형삼에 값을 매기는 데 쓰다
#  , 
def my_sum(num1, num2):
    print(num1 + num2)

my_sum(20,10)
my_sum(100,200)

#  , '*'
def print_star():
    print('*'*5)

print_star()


#  , n '*'
def print_star2(n):
    print('*'*n)

print_star2(10)
print_star2(20)

#  : , 1+2+...+n 
def print_sum(n):
    num = 0
    for x in range(n+1):
        num += x
    print(num)

print_sum(100)

30
300
*****
**********
********************
5050


5. 함수 호출


""1. 형식 함수 이름(실참 목록)
2. 함수 호출(중점) 첫 번째 단계: 함수 성명 위치로 돌아가기 두 번째 단계: 인삼에 실제 참조로 값을 부여하기(전참: 매개 변수에 반드시 값이 있어야 함) 세 번째 단계: 실행 함수체 네 번째 단계: 복귀 값 되돌리기 --> 함수 호출 표현식 다섯 번째 단계: 함수체를 실행하고 함수 호출 위치로 돌아가기 다음 코드를 실행한다.
def sum2(num1,num2):
    # num1 = 10 , num2 = 20
    print(num1 + num2)

sum2(10,20)
print('----')
30
----

6. 함수의 매개 변수


1. 위치 매개 변수와 키워드 매개 변수


호출 함수 실참의 쓰기 방식 위치 매개 변수: 실참의 순서에 따라 - 인삼에 값을 부여하는 키워드 매개 변수: 인삼 1=값 1, 인삼 2=값 2...
def kiki(a, b, c):
    print('a:', a,'b:', b, 'c:', c)
#  
kiki(10, 20, 30)
#  
kiki(c=300, a=200, b=100)


2. 기본 매개 변수


"""함수 선언 시 매개 변수에 기본값을 설정할 수 있지만: 기본값이 있는 매개 변수는 매개 변수 목록의 맨 뒤에 두어야 합니다
기본값이 있을 때, 호출할 때 파라미터를 전달하지 않을 수 있습니다
def kiki2(a, c, b=0):
    # a =10 c =20
    print('a:', a,'b:', b, 'c:', c)

kiki2(10,20)
# a= 100 b= 300 c= 200
kiki2(100,200,300)

def kiki3(a=10, c=30, b=20):
    # a =10 c =20
    print('a:', a,'b:', b, 'c:', c)

kiki3(a=100,b=200)
kiki3(100,b=200)

a: 10 b: 20 c: 30
a: 200 b: 100 c: 300
a: 10 b: 0 c: 20
a: 100 b: 300 c: 200
a: 100 b: 200 c: 30
a: 100 b: 200 c: 30

3. 부정확한 길이 매개 변수


매개 변수의 개수가 확실하지 않을 때, 형삼의 앞에 *를 더해서 이 형삼을 하나의 원조로 만들어 여러 개의 값을 받는 데 사용할 수 있다. 만약 함수에 여러 개의 매개 변수가 있다면, 부정확한 길이의 매개 변수는 마지막에 두어야 한다
#  , 
def my_sum(*nums):
    print(sum(nums))

my_sum()
my_sum(1)
my_sum(1,2)
my_sum(1, 2, 3, 4)

def func4(name,age,*scores):
    print(scores, name, age)

func4(' ', 18, 90, 34, 324)

0
1
3
10
(90, 34, 324)   18

7. 함수의 반환값


'''함수의 반환 값은 함수 호출 표현식의 값이다. 바로 리턴 키워드 뒤에 있는 표현식의 값python의 모든 함수에 반환 값이 있다. 반환 값은 기본적으로 None 실행 함수체가 리턴을 만나지 않았고 함수의 반환 값은 None이다. 리턴을 만났을 때 편지의 반환 값은 리턴의 뒤에 있는 값이다.
함수 호출 표현식 -> 호출 함수의 문장 (함수 이름 (실참) return - - -> 키워드, 함수체에만 쓸 수 있습니다.반환값과 끝 함수를 되돌려줍니다
주의: 함수의 반환 값을 보십시오.retutn을 만났는지만 보십시오.None만 만나지 않으면,
#  1: return
def func1():
    print('hello python!')

#  
re = func1()
print(re)

#  
print(func1())

#  
list1 = [func1(), 1]
print(list1)

hello python!
None
hello python!
None
hello python!
[None, 1]

시나리오 2: return 있음


함수를 실행할 때,return을 만났을 때, 함수는 바로 끝납니다.그리고return 뒤의 결과를 반환값으로 합니다
def func2():
    print('====')
    print('@@@@@@')
    return 100
    print('1000')

func2()
re = func2()
print(re)

====
@@@@@@
====
@@@@@@
100

주의: 함수에return만 있는 것이 아니라 함수의 반환값은return 뒤의 값입니다
def func3(n):
    if n % 2:
        return ' '

print(func3(4)) # None
print(func3(5)) #  

None
 

함수의 기능을 실현하면 새로운 데이터가 생기고, 새로운 데이터가 생기지 않으면 값을 되돌려주지 않는다
#  , 
def jie_ceng(num):
    sum1 = 1
    for x in range(1, num+1):
        sum1 *= x

    return sum1

re = jie_ceng(10)
print(re)

3628800

좋은 웹페이지 즐겨찾기